Java中的经典算法——循环返回上级目录/统计不同的字符串

今天带来的是关于字符串的几道题木,其实比较简单,第二道题目的正则表达式是个难点。因为有了疑问,所以我还在研究正则表达式。
下面就步入正题:

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中的经典算法——求最大公约数/最小公倍数/瓶盖换饮料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值