今天带来的是关于字符串的几道题木,其实比较简单,第二道题目的正则表达式是个难点。因为有了疑问,所以我还在研究正则表达式。
下面就步入正题:
1.循环返回上级目录
代码如下:
/*
* DisplayParentDirectory.java
*
* Created on: 2020年2月20日
* Author: Sdjzu_Nxy
*/
//循环显示上级目录
package algorithm;
import java.util.Scanner;
public class DisplayParentDirectory {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要路径(格式:E:\\Projects\\Java_Projects\\class1):");
String fileName = input.nextLine();
while(true) {
System.out.println(fileName);
int index = fileName.lastIndexOf("\\");
fileName = fileName.substring(0,index);
if (fileName.indexOf("\\") == -1) {
System.out.println(fileName);
break;
}
}
}
}
算法分析:这个题目比较简单,主要就是从后边往前分析,遇到“\”就舍弃掉后面的字符串一级一级输出就好了。
2.给定一个字符串,统计其里面包含的英文字母、空格、数字、中文字符及其他符号的个数
代码如下:
/*
* CountCharNumber.java
*
* Created on: 2020年2月20日
* Author: Sdjzu_Nxy
*/
//给定一个字符串,统计其里面包含的英文字母、空格、数字、中文字符及其他符号的个数:
package algorithm;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CountCharNumber {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要统计的字符串:");
String str = input.nextLine();
System.out.println(str);
StringBuilder[] s = new StringBuilder[5];
for (int i = 0; i < s.length; i++) {
s[i] = new StringBuilder();
}
for (int i = 0; i < str.length(); i++) {
if ((str.charAt(i)>='A' && str.charAt(i)<='Z')||(str.charAt(i)>='a' && str.charAt(i)<='z')) {
//英文字符A-Z a-z, Z-z之间存在[\]^_'这6个字符
s[0].append(str.charAt(i));
}
else if(isCharacter(Character.toString(str.charAt(i))) == true) {//中文编码在这两个数之间
s[1].append(str.charAt(i));
}
else if(str.charAt(i)>='1' && str.charAt(i)<='9') {
s[2].append(str.charAt(i));
}
else if(str.charAt(i) == ' ') {
s[3].append(str.charAt(i));
}
else {
s[4].append(str.charAt(i));
}
}
for (int i = 0; i < s.length; i++) {
System.out.printf("%d \t%s\n",s[i].length(),s[i]);
}
}
/*根据正则表达式判断字符是否为汉字
* 字符串中包含汉字时返回true
*/
public static boolean isCharacter(String s) {
// 汉字的Unicode取值范围
String regex = "[\u4e00-\u9fa5]";
Pattern pattern = Pattern.compile(regex);
Matcher match = pattern.matcher(s);
return match.find();
}
}
算法分析:从前边开始一个字符一个字符的开始判断,注意英文字母A-z之间还保留着6个英文符号所以判断语句不能是大于等于’A’小于等于’z’;还一个判断的难点就是判断汉字,这里用到了正则表达式(参考方法),再就是我们拿出来的是单个字符,所以还得把转为字符串再进行判断这里用到的是Character.toString(str.charAt(i))方法。
以上就是好今天的题目,遇到的我不理解的就是正则表达式的使用,之后我会学习使用正则表达式,然后写一篇关于正则表达式的文章,希望大家多多支持。
以前的题目链接:
Java中的经典算法——求素数/求水仙花数
Java中的经典算法——分解质因数/Switch判断成绩/猴子吃桃
Java中的经典算法——求最大公约数/最小公倍数/瓶盖换饮料