使用字符串方法来计算字符数

时间:2014-11-04 18:26:04

标签: java string

我试图计算字符串中非空字符的数量。

当没有前导空格时它工作正常,但是当我从中添加3个空格时,它会使非空白字符的数量加倍。

这是我的代码:

import java.io.*;
import java.util.*;

public class countCharacters
{

public static void main(String[] args) throws Exception
{
  String str1;
  int count;
  count = 0;



  BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter a string: ");
  str1 = dataIn.readLine();
while(str1.length() > 0)
      {


  System.out.println("The String ''" + str1 + "''");
  System.out.println("has " + str1.length() + " Characters, including all blanks.");
  for(int i=0; i < str1.length(); ++i)
    if(str1.charAt(i) !=' ')
    count++;
  str1 = str1.trim();
   System.out.println("and " + str1.length() + " Characters, trimmed of leading and trailing blanks.");
   System.out.println("and " + count + " non-blank characters.");
System.out.println("");

System.out.print("Enter a string: ");
  str1 = dataIn.readLine();
   }

  System.out.println("Program complete.");

}
}

4 个答案:

答案 0 :(得分:1)

你确定它每次都会翻倍吗?也许这只发生在第二次通过主循环?

输入新字符串时,您应该重置count。否则,您只需通过主循环添加前一次的count。在主循环底部的count = 0;之前添加一行System.out.print("Enter a string: ");,或在循环内声明并初始化count,而不是在循环之前。

答案 1 :(得分:0)

你可以简单地做

String temp = str1.replaceAll("\\s+","");

temp.length()会给你答案。

如果修改str1是一个选项

,你可以摆脱临时变量

答案 2 :(得分:0)

更简洁的方法是只创建一个没有任何空格的副本并比较长度:

    String str1 = "  the quick brown fox  ";
    String spaceless = str1.replace(" ", "");
    System.out.println("Number of spaces: "+(str1.length() - spaceless.length()));

答案 3 :(得分:0)

您是否尝试过使用静态方法:

Character.isWhitespace(char ch);

例如,

if(!Character.isWhitespace(str1.charAt(i)))
    count++;