java编程关于character的小问题 麻烦各位高手帮忙设计这样的一个java程序,要求如下:从一个文本框读取输入的内容,并统计其单词的数量,并作简单输出。初学者无知,望高手不啬赐教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是太明白单词数,以什么来分单词呢?空格吗?如果是空格,那么通过输入框得到String后,使用split(" ");来分开,得到一个String数组,就是单词了吧.,如果两个空格连在一起怎么办? 这个跟character有啥关系?我还以为是包装类呢。。 单词数不太好区别,单词之间还是/t,/n,/r之类的分隔!不过可以单个字符判断, 楼主说详细些。比如说iloveChinaforever,这就不好统计。是以空格作为分隔符么?若以空格分隔那就好办了。还有,adkkljd 算不算单词,还是英文中合法的单词,如果是那就更不好办了。 //根据空格分public static String[] getString(String s) { String[] start = s.split("\\p{Space}"); return start;}LZ自己可以根据需要选择:\p{Punct} 表示标点符号:!"#$%&'()*+,-./:; <=>?@[\]^_`{|}~ \p{Lower} 小写字母字符:[a-z] \p{Upper} 大写字母字符:[A-Z] \p{ASCII} 所有 ASCII:[\x00-\x7F] \p{Alpha} 字母字符:[\p{Lower}\p{Upper}] \p{Digit} 十进制数字:[0-9] \p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}] \p{Graph} 可见字符:[\p{Alnum}\p{Punct}] \p{Print} 可打印字符:[\p{Graph}\x20] \p{Blank} 空格或制表符:[ \t] \p{Cntrl} 控制字符:[\x00-\x1F\x7F] \p{XDigit} 十六进制数字:[0-9a-fA-F] \p{Space} 空白字符:[ \t\n\x0B\f\r] 如果只是单词那就好办了:用一个StringTokenizer就可以了。import java.util.*;public class Test { public static void main(String[] args) { System.out.println("input your character:"); Scanner sc = new Scanner(System.in); String str; str = sc.nextLine(); StringTokenizer st = new StringTokenizer(str); int num = st.countTokens(); String temp = null; while(st.hasMoreTokens()) { temp = st.nextToken(); System.out.println(temp); } System.out.println(num + " words!"); }} 下面是这写的相关代码,LZ可以参考下:/** * 读取输入的内容,并统计其单词的数量,并作简单输出.注意是以空格来统计单词数的。已经实现过滤空格,/n,/t */package com.java.basic.exercise.ch2;import java.util.Scanner;/** * @author johnston * * @version 2009-06-24 */public class CountWordNumber { /** * 从前台读取字符串,以"#"为结束标识 * @return */ public String readString() { Scanner scanner = new Scanner(System.in); System.out.println("Input content:"); StringBuffer sb = new StringBuffer(); String inputString; do { inputString = scanner.nextLine(); if (inputString.endsWith("#")) { inputString = inputString.replace("#", ""); sb.append(inputString); break; } sb.append(inputString + '\n'); //printString(sb.toString()); } while (true); scanner.close(); return sb.toString(); } /** * 统计inputString字符串的单词数 * @param inputString * @return */ public int countWords(String inputString) { int wordCount = 0; char[] charArray = inputString.toCharArray(); for (int i=0; i<charArray.length; i++) { if (i==0) { if (charArray[i] != ' ' && charArray[i] != '\n' && charArray[i] != '\t') { //如果第一个单词不是以空格,/n,/t开头的,wordCount自增 wordCount ++; } } else if ((charArray[i-1]==' ' || charArray[i-1] == '\n' || charArray[i] == '\t')&& (charArray[i] != ' ' && charArray[i] != '\n' && charArray[i] != '\t')) { //如果前面是空格,/n,/t,下一个字符不是空格/t,/n,wordCount自增 wordCount ++; } } return wordCount; } /** * 打印inputString * @param inputString */ public void printString(String inputString) { System.out.println(inputString); } /** * @param args */ public static void main(String[] args) { CountWordNumber countWordNumber = new CountWordNumber(); String inputString = countWordNumber.readString(); System.out.println("output content:"); countWordNumber.printString(inputString); int countWords = countWordNumber.countWords(inputString); System.out.println("Words counts:" + countWords); }}运行结果:Input content: tt ttt ttt ttt #output content: tt ttt ttt ttt Words counts:4 不好意思,我这儿所指的单词是指以空格作为分隔符的,比如"iloveChinaforever"当然不算单词,"adkkljk"也不算单词,在此特指英文单词。感谢4楼的朋友热心回答,感谢各位热心朋友的回答,多谢。 不好意思,说错了,"iloveChinaforever"应当当一个单词,"adkkljk"也算一个单词。 import java.util.regex.*;import javax.swing.JOptionPane;public class WordCounter { private static Pattern pat; private static Matcher mat; private static String matcher="thie Is a F5t fo jl'rw java,0%cover \n \t 个t fgt"; public static void main(String[] args){ // matcher=JOptionPane.showInputDialog("输入:"); String patern1="[A-z]+"; int count=0; pat=Pattern.compile(patern1); mat=pat.matcher(matcher); while(mat.find()){count++; System.out.print(mat.group()+" "); } System.out.println("\n"+count); }}thie Is a F t fo jl rw java cover t fgt 12过滤数字、汉字、空格、符号 \n \t 等 java同一个项目里不同包之间如何访问变量 JAVA DOM方式操作XML疑问? 请问,JTable有个特殊的事件叫什么事件? 关于Java数组数据项保存地点的疑惑 求lucene全文检索实例,附带源代码!!!!!!!!!!!!!!!! 序列化产生的文件不能跨平台使用的问题 想用java写一个p2p实现文件共享的小软件,求助!!!! 关于(XML)将一个不同的Document中的节点加载到另一个Document中去 关于Robocode的问题 请Java高手指点一下学习Java的各个阶段以及学习重点和需要看的书。 如何得到一个类中的私有成员,及其类型 js解析本地txt的完整实例
单词之间还是/t,/n,/r之类的分隔!
不过可以单个字符判断,
比如说iloveChinaforever,这就不好统计。
是以空格作为分隔符么?
若以空格分隔那就好办了。还有,adkkljd 算不算单词,还是英文中合法的单词,如果是那就更不好办了。
public static String[] getString(String s) {
String[] start = s.split("\\p{Space}");
return start;
}
LZ自己可以根据需要选择:
\p{Punct} 表示标点符号:!"#$%&'()*+,-./:; <=>?@[\]^_`{|}~
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十进制数字:[0-9]
\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}] \p{Graph} 可见字符:[\p{Alnum}\p{Punct}]
\p{Print} 可打印字符:[\p{Graph}\x20]
\p{Blank} 空格或制表符:[ \t]
\p{Cntrl} 控制字符:[\x00-\x1F\x7F]
\p{XDigit} 十六进制数字:[0-9a-fA-F]
\p{Space} 空白字符:[ \t\n\x0B\f\r]
System.out.println("input your character:");
Scanner sc = new Scanner(System.in);
String str;
str = sc.nextLine();
StringTokenizer st = new StringTokenizer(str);
int num = st.countTokens();
String temp = null;
while(st.hasMoreTokens()) {
temp = st.nextToken();
System.out.println(temp);
}
System.out.println(num + " words!");
}
}
* 读取输入的内容,并统计其单词的数量,并作简单输出.注意是以空格来统计单词数的。已经实现过滤空格,/n,/t
*/
package com.java.basic.exercise.ch2;import java.util.Scanner;/**
* @author johnston
*
* @version 2009-06-24
*/
public class CountWordNumber { /**
* 从前台读取字符串,以"#"为结束标识
* @return
*/
public String readString() {
Scanner scanner = new Scanner(System.in);
System.out.println("Input content:");
StringBuffer sb = new StringBuffer();
String inputString;
do {
inputString = scanner.nextLine();
if (inputString.endsWith("#")) {
inputString = inputString.replace("#", "");
sb.append(inputString);
break;
}
sb.append(inputString + '\n');
//printString(sb.toString());
} while (true);
scanner.close();
return sb.toString();
}
/**
* 统计inputString字符串的单词数
* @param inputString
* @return
*/
public int countWords(String inputString) {
int wordCount = 0;
char[] charArray = inputString.toCharArray();
for (int i=0; i<charArray.length; i++) {
if (i==0) {
if (charArray[i] != ' ' && charArray[i] != '\n' && charArray[i] != '\t') { //如果第一个单词不是以空格,/n,/t开头的,wordCount自增
wordCount ++;
}
} else if ((charArray[i-1]==' ' || charArray[i-1] == '\n' || charArray[i] == '\t')&& (charArray[i] != ' ' && charArray[i] != '\n' && charArray[i] != '\t')) { //如果前面是空格,/n,/t,下一个字符不是空格/t,/n,wordCount自增
wordCount ++;
}
}
return wordCount;
}
/**
* 打印inputString
* @param inputString
*/
public void printString(String inputString) {
System.out.println(inputString);
}
/**
* @param args
*/
public static void main(String[] args) {
CountWordNumber countWordNumber = new CountWordNumber();
String inputString = countWordNumber.readString();
System.out.println("output content:");
countWordNumber.printString(inputString);
int countWords = countWordNumber.countWords(inputString);
System.out.println("Words counts:" + countWords);
}}
运行结果:
Input content:
tt ttt
ttt
ttt
#
output content:
tt ttt
ttt
ttt
Words counts:4
不好意思,我这儿所指的单词是指以空格作为分隔符的,比如"iloveChinaforever"当然不算单词,"adkkljk"也不算单词,在此特指英文单词。感谢4楼的朋友热心回答,感谢各位热心朋友的回答,多谢。
import java.util.regex.*;
import javax.swing.JOptionPane;public class WordCounter {
private static Pattern pat;
private static Matcher mat;
private static String matcher="thie Is a F5t fo jl'rw java,0%cover \n \t 个t fgt";
public static void main(String[] args){
// matcher=JOptionPane.showInputDialog("输入:");
String patern1="[A-z]+";
int count=0;
pat=Pattern.compile(patern1);
mat=pat.matcher(matcher);
while(mat.find()){count++;
System.out.print(mat.group()+" ");
}
System.out.println("\n"+count);
}
}thie Is a F t fo jl rw java cover t fgt
12
过滤数字、汉字、空格、符号 \n \t 等