补全程序题
定义Java类Test,实现从键盘输入一个字符串,统计字符串中数字字符的个数,写入到E盘下的1.txt文件中的功能(需判断1.txt文件是否存在)。程序缺少部分代码,请补充完整后使程序可成功运行。
import java.io.*
public class Test{
public static void main(String[] args) throws IOException{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String s=in.readLine();
}
```
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入字符:");
String s = in.readLine();
writeFile(count(s));
}
public static void writeFile(String contentStr) {
FileWriter fileWriter = null;
BufferedWriter bw = null;
try {
// The path of target file must be existed, target file can not be existed
File testFile = new File("D:\\1.txt");
if (!testFile.exists()) {
testFile.createNewFile();
System.out.println("文件已创建");
} else {
System.out.println("文件已存在");
}
fileWriter = new FileWriter(testFile);
bw = new BufferedWriter(fileWriter);
bw.write(contentStr);
bw.append(System.getProperty("line.separator"));
bw.flush();
} catch (Exception e) {
e.toString();
} finally {
if (bw != null) {
try {
bw.close();
} catch (Exception e) {
e.toString();
}
}
if (fileWriter != null) {
try {
fileWriter.close();
} catch (Exception e) {
e.toString();
}
}
}
}
/** 中文字符 */
private static int chCharacter = 0;
/** 英文字符 */
private static int enCharacter = 0;
/** 空格 */
private static int spaceCharacter = 0;
/** 数字 */
private static int numberCharacter = 0;
/** 其他字符 */
private static int otherCharacter = 0;
//记录中文字符
private static StringBuilder sb1 = new StringBuilder();
//记录英文字符
private static StringBuilder sb2 = new StringBuilder();
//记录数字
private static StringBuilder sb3 = new StringBuilder();
//记录特殊字符
private static StringBuilder sb4 = new StringBuilder();
/***
* 统计字符串中中文,英文,数字,空格等字符个数
*
* @param str 需要统计的字符串
*/
public static String count(String str) {
StringBuffer sb = new StringBuffer();
if (str.equals("") || str == null) {
System.out.println("字符串为空");
return "字符串为空";
}
for (int i = 0; i < str.length(); i++) {
char tmp = str.charAt(i);
if ((tmp >= 'A' && tmp <= 'Z') || (tmp >= 'a' && tmp <= 'z')) {
enCharacter++;
sb2.append(tmp + " ");
} else if ((tmp >= '0') && (tmp <= '9')) {
numberCharacter++;
sb3.append(tmp + " ");
} else if (tmp == ' ') {
spaceCharacter++;
} else if (isChinese(tmp)) {
chCharacter++;
sb1.append(tmp + " ");
} else {
otherCharacter++;
sb4.append(tmp + " ");
}
}
System.out.println("字符串:" + str + " \r\n");
System.out.println("中文字符有:" + chCharacter + "个 (" + sb1.toString() + ")");
System.out.println("英文字符有:" + enCharacter + "个 (" + sb2.toString() + ")");
System.out.println("数字有:" + numberCharacter + "个 (" + sb3.toString() + ")");
System.out.println("空格有:" + spaceCharacter + "个");
System.out.println("其他字符有:" + otherCharacter + "个 (" + sb4.toString() + ")");
sb.append("字符串:" + str + " \r\n");
sb.append("中文字符有:" + chCharacter + "个 (" + sb1.toString() + ")"+ " \r\n");
sb.append("英文字符有:" + enCharacter + "个 (" + sb2.toString() + ")"+ " \r\n");
sb.append("数字有:" + numberCharacter + "个 (" + sb3.toString() + ")"+ " \r\n");
sb.append("空格有:" + spaceCharacter + "个"+ " \r\n");
sb.append("其他字符有:" + otherCharacter + "个 (" + sb4.toString() + ")"+ " \r\n");
return sb.toString();
}
/***
* 判断字符是否为中文
*
* @param ch 需要判断的字符
* @return 中文返回true,非中文返回false
*/
private static boolean isChinese(char ch) {
//获取此字符的UniCodeBlock
Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
// GENERAL_PUNCTUATION 判断中文的“号
// CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
System.out.println(ch + " 是中文");
//sb1.append(ch+" ");
return true;
}
return false;
}