前言:之前写了一篇总结Java String常用的方法,光有理论知识是不行的主要还是待练习,所以总结了五道练习题分享下。
理论知识:https://blog.csdn.net/qq_43437122/article/details/108422601
第一道:模拟一个trim方法,去除字符串两端的空格
public class ExerDemo01 {
// 模拟一个trim方法,去除字符串两端的空格
public static String main(String[] args) {
String s = " hello ";
int len = s.length();
int cur = 0;
char[] val = s.toCharArray();
// 先查找开头的空格
while(cur < len && val[cur] <= ' ') {
cur++; // 如果是空格则游标往后移一位
}
while(cur < len && val[cur] <= ' ') {
len--;
}
/*
* 如果cur的值大于0或者len的值小于s.length(),那就说明trim首尾有空格,需要返回截取后的字符子串,否则不需要
*/
return (cur > 0) || (len < s.length()) ? s.substring(cur, len) : s;
}
}
第二道:将一个字符串进行反转。将字符串中指定部分进行反转。比如"abcdefg",反转子串"cdef",转为"abfedcg"
/*
* 将一个字符串进行反转。将字符串中指定部分进行反转。比如"abcdefg",反转子串"cdef",转为"abfedcg"
*/
public class ExerDemo02 {
public static void main(String[] args) {
String s = "abcdefg";
// 截取要反转的字符串并转为数组
char[] reverArr = s.substring(2, 6).toCharArray();
// 反转reverArr
for(int i = 0; i < (reverArr.length / 2); i++) {
char temp = reverArr[i];
reverArr[i] = reverArr[reverArr.length - 1 - i];
reverArr[reverArr.length - 1 - i] = temp;
}
// 替换掉元数组中对应的字符子串
String resStr = s.replace("cdef", String.valueOf(reverArr));
// 打印
System.out.println(resStr);
}
}
第三道:获取一个字符串在另一个字符串中出现的次数。
/*
* 获取一个字符串在另一个字符串中出现的次数。
* 比如:获取"ab"在"abkkcadkabkebfkabkskab"中出现的次数
*/
public class ExerDemo03 {
public static void main(String[] args) {
String s = "abkkcadkabkebfkabkskab";
String aimStr = "ab";
int curIndex = 0; // 记录开始查找的位置
int count = 0; // 记录目标字符串出现的次数
// 开始循环查找目标子串
while(curIndex < s.length()) {
int findRes = s.indexOf("ab", curIndex);
/*
* 如果查找结果不为-1,说明找到了目标子串,所以count加1,同时更新curIndex的位置
*/
if(findRes != -1) {
count++;
curIndex = findRes + aimStr.length();
}else {
// 如果为-1,说明已经找出来完了
break;
}
}
System.out.println(count);
}
}
第四道:获取两个字符串中最大相同子串。
/*
* 获取两个字符串中最大相同子串。
* 比如:str1 = "abcwerthelloyuiodef"; str2 = "cvhellobnm"
* 提示:将短的那个串进行长度依次递减的子串与较长的串比较
*/
public class ExerDemo04 {
public static void main(String[] args) {
String str1 = "abcwerthelloyuiodef";
String str2 = "def";
int maxStrLen = 0; // 记录最长的公共子串的长度
// 查找所有公共子串,并找出最长的一个
for(int i = 0; i < str2.length(); i++) {
for(int j = str2.length(); j > i; j--) {
// 获取当前子串
String temp = str2.substring(i, j);
if(str1.contains(temp)) {
// 更新maxStrLen的最大值
maxStrLen = (temp.length() > maxStrLen) ? temp.length() : maxStrLen;
}
}
}
// 打印
System.out.println(maxStrLen);
}
}
第五道:对字符串中字符进行自然排序
import java.util.Arrays;
/*
* 对字符串中字符进行自然排序
* 提示:
* 1)字符串变成字符数组
* 2)对数组排序,选择,冒泡,Arrays.sort();
* 3)将排序后的数组变成字符串
*/
public class ExerDemo05 {
public static void main(String[] args) {
String s = "9084322";
// 将字符串转为数组
char[] numArr = s.toCharArray();
// 利用Arrays工具类进行排序
Arrays.sort(numArr);
// 打印排序后的结果
System.out.println(numArr);
}
}