日期:2014-05-20 浏览次数:20810 次
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;
思路可否??
------解决方案--------------------
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
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); } } }