目录
1.StringBuilder以及StringJoiner的介绍
1.StringBuilder以及StringJoiner的介绍
1.1 StringBulider
一.创建对象
StringBuilder sb = new StringBuilder("abc");
二.主要成员方法
(1)
sb.append(any type); //用以添加元素
sb.append(1); sb.append(2.6); sb.append(true);
打印输出结果:abc12.6true
(2)
sb.reverse();//反转
打印输出结果:cba
(3)
int len=sb.length();//获取字符串长度
打印输出结果:3
(4)
String str=sb.toString();//将StringBuilder变回String类型
三.主要应用场景
需要拼接字符或反转字符串时。 //String类型数据无法被更改,故需要更改字符串内容时常使用StringBuilder
1.2 StringJoiner
一.创建对象,并指定中间的间隔符号
StringJoiner sj1 = new StringJoiner("---");//间隔符号 StringJoiner sj2 = new StringJoiner("---","[","]");//间隔符号,开始符号,结束符号
二.主要成员方法
sj1.add("aaa").add("bbb").add("ccc"); sj2.add("aaa").add("bbb").add("ccc");
注意:StringJoiner的添加元素方法只能添加字符串类型,而StringBuilder的添加元素方法可以添加任意类型数据
打印输出结果:aaa---bbb---ccc //sj1
[aaa---bbb---ccc] //sj2
三.主要应用场景
可以较快捷地将数组内的元素以特定符号间隔输出(StringJoiner应用较少)
2.字符串简单习题解析
2.1 罗马字符转换
完整代码如下:
import java.util.Scanner;
public class StringTest6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//使用while循环语句,若输入字符串不满足要求则重复输入
while (true) {
System.out.println("请输入一个字符串:");
String str = sc.next();
if (checkString(str)) {
String result = stringChange(str);
System.out.println(result);
break;
} else {
System.out.println("你所输入的字符串不符合要求");
}
}
}
//构造一个方法以检验输入的字符串是否满足要求
public static boolean checkString(String str) {
if (str.length() > 9) {
return false;
}
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c < '0' || c > '9') {
return false;
}
}
return true;
}
//构造一个方法将所给字符串转换为对应罗马字符
public static String stringChange(String str) {
//定义一个数组,让索引跟罗马数字产生一个对应关系,即查表法(也可使用switch语句)
String[] romeNumber = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
StringBuilder sb = new StringBuilder();//使用StringBuilder以拼接字符
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
sb.append(romeNumber[c -48]);//c先转换为对应ASCII码值,再进行整型运算。
// c-48是字符c对应romeNumber数组索引
}
return sb.toString();
}
}
2.2 字符串旋转
完整代码如下:
法一:
import java.util.Scanner;
public class StringTest7 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入俩个字符串:");
String str1 = sc.next();
String str2 = sc.next();
System.out.println(stringSpin(str1, str2));
}
public static boolean stringSpin(String str1, String str2) {
int count = str1.length();
while (true) {
StringBuilder sb = new StringBuilder();
//旋转字符串
for (int i = 1; i < str1.length(); i++) {
char c = str1.charAt(i);
sb.append(c);
}
sb.append(str1.charAt(0));
//检查旋转后的字符串是否相等
if (sb.toString().equals(str2)) {
return true;
} else {
str1 = sb.toString();
count--;
}
if (count == 0) {
return false;
}
}
}
}
法二:
public class StringTest8 {
public static void main(String[] args) {
String strA="abcde";
String strB="bcdea";
System.out.println(check(strA,strB));
}
//检查旋转后的字符串是否相等
public static boolean check(String strA,String strB){
for (int i = 0; i < strA.length(); i++) {
strA=rotate(strA);
if (strA.equals(strB)){
return true;
}
}
return false;
}
//使用subString截取字符串,把左边的字符截取到右边去
public static String rotate(String str){
char start=str.charAt(0);
String end=str.substring(1);
return end+start;
}
}
不难发现,使用subString来截取字符串的写法更加简单且容易理解
法三:
public class StringTest9 {
public static void main(String[] args) {
String strA="abcde";
String strB="bcdea";
System.out.println(check(strA,strB));
}
//检查旋转后的字符串是否相等
public static boolean check(String strA,String strB){
for (int i = 0; i < strA.length(); i++) {
strA=rotate(strA);
if (strA.equals(strB)){
return true;
}
}
return false;
}
//先将字符串转换为字符数组,然后调整字符数组里的数据,最后把字符数组转换回字符串
public static String rotate(String str){
char[] arr=str.toCharArray();
//拿出左边的字符
char start=arr[0];
//将剩余字符依次左移一位
for (int i = 1; i < arr.length; i++) {
arr[i-1]=arr[i];
}
//将左边的字符放在右边
arr[arr.length-1]=start;
//将字符数组转为字符串
String result=new String(arr);
return result;
}
}
也可以利用将字符串转换为字符数组的写法
总结:如果遇到修改字符串内容的问题,有俩种方法,一是使用subString截取,二是变成字符数组