日期:2014-05-20  浏览次数:20810 次

java 统计字数
例如 用java怎么统计 这个字符串的字数 “海外引越し、Copyright Art Corporation”


------解决方案--------------------
Java code

    public static void main(String[] args) throws Exception{
       String str = "海外引越し、Copyright Art Corporation";
        if(str == null) throw new Exception("");
        char[] c = str.toCharArray();
        int words = 0;
        boolean wordflag = false;
        for(int i=0;i<c.length;i++){
            if((c[i]>='a' && c[i] <= 'z') || (c[i] >= 'A' && c[i] <= 'Z')){
                if(wordflag) {
                    continue;
                }
                wordflag = true;
            }else{
                wordflag = false;
                if((c[i] != ' ') || 
                    (((c[i]>='z') || (c[i] <= 'A')) && 
                    (c[i])<90 || c[i]>96))
                    words++;
            }
        }
        System.out.println("words= " + words);
    }

------解决方案--------------------
int 字数 = 0;
str.charAt(i);
用正则匹配 是中文加1;

英文之后是空格 加1;
是英文返回一个boolean值
是空格返回一个boolean值
如果两个都是True
并且是连续的

输出i;
思路可否??
------解决方案--------------------
Java code
 
public class Test
{   
public static void main(String[] args)
  {   
char ch;  //每一个单独的char
//原始文本
String str = "海外引越し、Copyright Art Corporation";
//单词的临时变量
boolean wordBegin=false;
//汉字个数
int numChi=0;
//单词个数
int numEng=0;
//其他符号
int numCha=0;
  for(int i=0;i <str.length();i++)
  { 
  ch=str.charAt(i);
  if(Character.isSpaceChar(ch))  //空白符
  {
  if(wordBegin)
  {
  numEng++;    //单词
  wordBegin=false;
  }
  continue; 
  }
  else if(ch>=19968&&ch <=64041)
  {
  numChi++;  //汉字
  continue;
  }
  else if((ch>=65&&ch <=90)||(ch>=97&&ch <=122))
  {
  wordBegin=true;
  }
  else
  {
  numCha++;  //其他符号
  }
}
  if(wordBegin)
  {
  numEng++;
  }
 
  System.out.println("汉字个数:"+numChi);
  System.out.println("单词个数:"+numEng);
  System.out.println("其他符号:"+numCha);
  }
}

汉字个数:4
单词个数:3
其他符号:2

------解决方案--------------------
Java code

import java.util.regex.*;

public class WordCount {
    public static final String PATTERN_STR = "[\\u4E00-\\u9FFF]|(\\b\\w+\\b)";
    
    public static void main(String[] args) {
        if (args.length > 0) {
            Pattern p = Pattern.compile(PATTERN_STR);
            Matcher m = p.matcher(args[0]);
            int i = 0;
            for (; m.find(); i ++)
                System.out.println(m.toMatchResult());
            System.out.println(i);
        }
    }
}