我有下面的代码,它可以在没有HashMap,HashSet等的字符串中找到重复项。但是我想要一个比这个更好的解决方案。请帮助我是Java编程新手。我相信Java足够强大,可以提供这一点。这并不是说我试图在Java集合中避免HashMap等。我只是想要一个更好的解决方案
public class practice {
static void countWords(String st){
//split text to array of words
String[] words=st.split("\\s");
//frequency array
int[] fr=new int[words.length];
//init frequency array
for(int i=0;i<fr.length;i++)
fr[i]=0;
//count words frequency
for(int i=0;i<words.length;i++){
for(int j=0;j<words.length;j++){
if(words[i].equals(words[j]))
{
fr[i]++;
}
}
}
//clean duplicates
for(int i=0;i<words.length;i++){
for(int j=0;j<words.length;j++){
if(words[i].equals(words[j]))
{
if(i!=j) words[i]="";
}
}
}
//show the output
int total=0;
System.out.println("Duplicate words:");
for(int i=0;i<words.length;i++){
if(words[i]!=""){
System.out.println(words[i]+"="+fr[i]);
total+=fr[i];
}
}
System.out.println("Total words counted: "+total);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
countWords("apple banna apple fruit sam fruit apple hello hi hi hello hi");
}
}
public static void main(String[] args) {
String s = "abcabcc abc abcdeffrgh";
char[] ch = s.toCharArray();
String temp = "";
int j = 0;
for (int i = 0; i < s.length(); i++) {
int count = 0;
char result = 0;
for (j = 0; j < s.length(); j++) {
if (ch[i] == ch[j]) {
result = ch[i];
count = count + 1;
} else {
result = ch[i];
}
}
if (!temp.contains(Character.toString(ch[i]))) {
temp = temp + ch[i];
System.out.println(result + "--count--" + count);
}
}
}
您可以使用 Java8 流在单行代码中编写整个 countWords
方法(遵循内联注释):
static void countWords(String st){
Map<String, Long> wordsAndCounts =
Arrays.stream(st.split("\\s")). //Splt the string by space i.e., word
collect(Collectors.groupingBy( //Apply groupby
Function.identity(), //Map each word
Collectors.counting() //Count how many words
));
System.out.println(wordsAndCounts);
}
输出:
{banna=1, hi=3, apple=3, fruit=2, hello=2, sam=1}
尽管Hashmap和Hashset最适合这一要求。但如果你不想使用它,你也可以更有效地实现同样的目标:
问题内容: 我需要在HTML源代码中找到一个单词。我还需要计算发生的次数。我正在尝试使用正则表达式。但它说找到0个匹配项。 我正在使用正则表达式,因为我认为这是最好的方法。如果有更好的方法,请告诉我。 我需要在HTML源代码中找到单词“ hsw.ads”的出现。 我已采取以下步骤。 但是计数是0; 请让我知道您的解决方案。 谢谢。帮助寻求者 问题答案: 您应该尝试一下。 在字符串中传递要搜索的单词
问题内容: 我对JavaScript中的字符串操作不太满意,我想知道如何在不删节的情况下缩短字符串。我知道如何使用子字符串,但不知道indexOf或其他任何很好的方法。 说我有以下字符串: 我想将其缩减为10个字符,但是如果它不以空格结尾,请完成该单词。我不希望字符串变量看起来像这样: “这是我不能忍受的长字符串” 我希望它在出现空格之前将单词结束。 问题答案: 如果我理解正确,则希望将字符串缩短
我有以下短语: 我想从列表中找到特定的短语。 如何在短语串中找到短语列表中的确切短语? 我试过了: 问题是这打印: 我只希望出现完全匹配的“ict”: 我如何在大量短语中实现这一点?
问题内容: 在 java 中查找字符串中的第一个非重复字符? 问题答案: 有多种方法可以找到它。 他们之中有一些是: 使用LinkedHashMap 使用 indexOf 和 lastIndexOf 方法。 面试问题之一是“你将如何在 String 中找到第一个非重复字符。” 例如: 如果输入字符串是“analogy”,那么程序应该返回’n’ 如果输入字符串是“easyest”,那么程序应该返回’
问题内容: 如何将以下单词拆分为数组 进入 我尝试过这样的事情 但是输出是 问题答案: 要在空格和撇号上进行特殊分割: 或分割成任何非文字字符:
问题内容: 我正在编写一段代码,例如,如果我有,我只需要查找完整的单词 并且我正在搜索“ t”,那么我应该找不到任何单词。 谁能告诉我如何用Java编写这样的程序? 问题答案: 我将正则表达式用于此类任务。在您的情况下,它应如下所示: 简短说明: 。匹配任何字符,*?是 零次或多次 ,\ b是 单词边界 。 有关正则表达式的更多信息,请参见此处或专门针对Java 。