如何使用scanner、循环、数组、if和else语句计算单词(不计算特殊字符的序列)



如何使用scanner、loop、array、if和else语句计算单词(不计算特殊字符的序列)?

它还没有完成,因为我不知道怎么做!有人能帮我吗?

import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
System.out.println("Simple Java Word Count Program");
String str1 = null;
char ch;
int sample = 0;
int i;
int j = 0;
int k = 0;
int wordCount = 1;
Scanner in = new Scanner(System.in);
System.out.println("Enter your quote:");
str1 = in.nextLine();
for (i = 0; i < str1.length(); i++)
{
if (str1.charAt(i) == ' ' && str1.charAt(i + 1) != ' ')
{
String[] arr = str1.split(" ");
for (k = 0; k < ;)
{
for (j = 0; j < arr[i].length(); j++)
{
ch = arr[i].charAt(j);
if (Character.isLetterOrDigit(ch))
{
wordCount++;
}
}
}
}
}
System.out.println("Word count is = " + wordCount);
}
}
String string = "Simple Java Word Count Program";
String[] words = string.split("\s+");
System.out.println("Words Count: " + words.length);

好的是,现在您甚至可以通过indexes使用wordsstring中的第一个字将是words[0],第二个字将为words[1],依此类推

另一种方法是计算空格的数量,然后单词的数量将比空格的数量多1(在理想世界中):

String string = "Simple Java Word Count Program";
string = string.trim();
int spaceCount = 0;
for(int i = string.length() - 1; i >= 0; i--)
{
if(string.charAt(i) == ' ')
{
spaceCount++;
}
}
System.out.println("Words Count: " + (spaceCount + 1));

如果两个单词之间有多个空格,则上述spaceCount方法将失败。为了防止这种情况发生,请使用以下简单的技术:

String string = "  Simple  Java   Word  Count  Program ";
string = string.trim();
int spaceCount = 0;
boolean isLastCharSpace = false;
for(int i = string.length() - 1; i >= 0; i--)
{
if(string.charAt(i) == ' ')
{
if(!isLastCharSpace)
{
spaceCount++;
isLastCharSpace = true;
}
}
else
{
isLastCharSpace = false;
}
}
System.out.println("Words Count: " + (spaceCount + 1));

现在,与第一种方法不同,这将在不使用任何额外内存的情况下打印正确的单词计数,也不会像第二种方法那样陷入单词之间多个连续空格的陷阱。

如果字符串中包含一系列特殊字符,并且这些字符附有单词,则不会出现问题。如果它们没有附加单词,并且独立存在于字符串中,那么程序的答案和实际答案会有一些差异。甚至可以编写类似的代码来防止这种情况的发生,并提供完全正确的答案。以下是这种方法的样子:

String string = "  Simple  Java -  Word,  {Count  Program} ";
string = string.trim();
string = removeAllSpecialCharacters(string);
int spaceCount = 0;
boolean isLastCharSpace = false;
for (int i = string.length() - 1; i >= 0; i--)
{
if (string.charAt(i) == ' ')
{
if (!isLastCharSpace)
{
spaceCount++;
isLastCharSpace = true;
}
}
else
{
isLastCharSpace = false;
}
}
System.out.println("Words Count: " + (spaceCount + 1));

这里是removeAllSpecialCharacters方法:

private String removeAllSpecialCharacters(String string)
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < string.length(); i++)
{
char ch = string.charAt(i);
// Allow only letters, digits, and spaces.
if (Character.isLetterOrDigit(ch) || ch == ' ')
{
stringBuilder.append(ch);
}
}
return stringBuilder.toString();
}
String s = "The quick brown fox jumps over the lazy dog";
int totalWords = 0;
for(String current: s.split("\s+")){
totalWords++;
}
System.out.println(totalWords);

编辑:

我们可以使用不同的正则表达式来忽略单词计数中的特殊字符。

String s = "The quick brown fox jumps over the lazy dog";
int totalWords = 0;
for(String current: s.split("[^A-z]+")){
totalWords++;
}
System.out.println(totalWords);

如果我理解你的问题,这是一种方法:

package eclipsePackage;
import java.util.Scanner;
public class hehe {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("enter a sentence");
String str1=in.nextLine();
int wordCount=0;
str1.trim();
for(int i=0;i<str1.length();i++){
if(str1.charAt(i)==' ')
wordCount++;
}
wordCount++;
System.out.println(wordCount);
}
}

逻辑:首先修剪句子以删除任何不需要的空格,然后使用for循环来计算空格的数量,句子中的单词数量将比这个多一个。

我认为以下内容可以满足您的需求。如果您只想知道单词的"数量",那么查看String.split(regex).生成的数组中的"长度"字段似乎就足够了

import java.util.Scanner;
public class SplitJava {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter something: ");
String str = scanner.nextLine();
System.out.println("Number of words in '" + str + "': " + str.split("\s+").length);
scanner.close();
}
}

最新更新