Java的String与StringBuilder例题
package com.jiachen.StringBuilderDemo1;
import java.util.Scanner;
public class Exercise2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine().trim(); // 读取输入并去除前后空格
String result;
// 根据输入的类型进行反转
if (s.contains(".")) {
// 处理小数
result = reverseDecimal(s);
} else if (s.contains("/")) {
// 处理分数
result = reverseFraction(s);
} else if (s.endsWith("%")) {
// 处理百分数
result = reversePercentage(s);
} else {
// 处理整数
result = reverseInteger(s);
}
System.out.println(result);
}
/**
* 反转整数部分
*/
private static String reverseInteger(String s) {
StringBuilder sb = new StringBuilder(s).reverse();
// 去掉前导零,除非原数为 "0"
while (sb.length() > 1 && sb.charAt(0) == '0') {
sb.deleteCharAt(0);
}
return sb.toString();
}
/**
* 反转小数部分
*/
private static String reverseDecimal(String s) {
String[] parts = s.split("\\.");
String integerPart = reverseInteger(parts[0]); // 反转整数部分
String decimalPart = new StringBuilder(parts[1]).reverse().toString(); // 反转小数部分
// 去掉小数部分的后导零,除非小数部分全为 "0"
while (decimalPart.length() > 1 && decimalPart.endsWith("0")) {
decimalPart = decimalPart.substring(0, decimalPart.length() - 1);
}
return integerPart + "." + decimalPart;
}
/**
* 反转分数部分
*/
private static String reverseFraction(String s) {
String[] parts = s.split("/");
String numerator = reverseInteger(parts[0]); // 反转分子
String denominator = reverseInteger(parts[1]); // 反转分母
return numerator + "/" + denominator;
}
/**
* 反转百分数部分
*/
private static String reversePercentage(String s) {
String numberPart = s.substring(0, s.length() - 1); // 去掉百分号
String reversedNumber = reverseInteger(numberPart); // 反转数字部分
return reversedNumber + "%";
}
}
String类和Stringbulider类经常相互转换,比如想要反转字符串,就要把String类型转为StringBuilder类型,然后调用reverse方法,比如想要分割Stringbuilder类型的变量,要先把他转成字符串类型。
几个必须转化的例子:
-
反转字符串:
- 场景:需要反转一个字符串。
- 示例代码:
String original = "hello"; StringBuilder sb = new StringBuilder(original); String reversed = sb.reverse().toString(); System.out.println(reversed); // 输出 "olleh"
-
分割字符串:
- 场景:需要将一个
StringBuilder
对象按特定分隔符分割成多个子字符串。 - 示例代码:
StringBuilder sb = new StringBuilder("apple,banana,cherry"); String[] parts = sb.toString().split(","); for (String part : parts) { System.out.println(part); } // 输出: // apple // banana // cherry
- 场景:需要将一个
-
拼接字符串:
- 场景:需要频繁拼接字符串,然后最终得到一个不可变的字符串。
- 示例代码:
StringBuilder sb = new StringBuilder(); sb.append("Hello"); sb.append(" "); sb.append("World"); String result = sb.toString(); System.out.println(result); // 输出 "Hello World"
-
去除前导零:
- 场景:需要去除字符串前面的零,然后得到一个不可变的字符串。
- 示例代码:
String original = "000123"; StringBuilder sb = new StringBuilder(original); while (sb.length() > 1 && sb.charAt(0) == '0') { sb.deleteCharAt(0); } String result = sb.toString(); System.out.println(result); // 输出 "123"
-
去除后导零:
- 场景:需要去除字符串后面的零,然后得到一个不可变的字符串。
- 示例代码:
String original = "123000"; StringBuilder sb = new StringBuilder(original); while (sb.length() > 1 && sb.charAt(sb.length() - 1) == '0') { sb.deleteCharAt(sb.length() - 1); } String result = sb.toString(); System.out.println(result); // 输出 "123"
总结:
String
到StringBuilder
:适用于需要频繁修改字符串的场景,如反转、插入、删除等。StringBuilder
到String
:适用于需要返回不可变字符串或使用String
类提供的方法进行进一步处理的场景,如分割、查找等。