思路:别的语言都可以不用辅助数组,我Java就得用!
c:先计算字符串中数字个数,然后利用双指针将原本字符串逆序从数组最后往前插入,若遇到数字则替换为逆序的“number”,这个过程会使新字符串从后往前覆盖,最后实现替代原字符串而不需要新的空间;
补充知识:
1.Character.isDigit(s.charAt(i))
是Java中的一个表达式,用于检查字符串 s
在索引 i
处的字符是否是一个数字。
这里的 s
是一个字符串(String
类型),charAt(i)
是 String
类的一个方法,用于获取字符串中指定索引 i
处的字符(char
类型)。Character.isDigit(char ch)
是 Character
类的一个静态方法,用于检查指定的字符 ch
是否是一个数字(0到9之间的字符)。
如果 s.charAt(i)
返回的字符是一个数字(即 '0' 到 '9' 中的任何一个),则 Character.isDigit(s.charAt(i))
的结果为 true
;如果不是数字,则结果为 false
2.s.toCharArray()
是 Java 中 String 类的一个方法,它用于将字符串 s
转换成一个字符数组(char[]
)。这个方法会创建一个新的字符数组,并将字符串 s
中的每个字符按照顺序放入这个数组中。然后,这个方法会返回这个新创建的字符数组。
代码:
package CharacterString; import java.util.Scanner; public class ReverseString {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入字符串:");String s = scanner.next();System.out.println(replaceNumber(s));scanner.close();}public static String replaceNumber(String s) {int count = 0;int sOldSize = s.length();for (int i = 0; i < s.length(); i++) {if (Character.isDigit(s.charAt(i))) {count++;}}//getcountchar[] newS = new char[s.length() + count * 5];int sNewSize = newS.length;System.arraycopy(s.toCharArray(), 0, newS, 0, sOldSize);for (int i = sOldSize -1, j = sNewSize-1 ; i < j; i--, j--) {if (!Character.isDigit(newS[i])) {newS[j] = newS[i];}if (Character.isDigit(newS[i])) {newS[j] = 'r';newS[j - 1] = 'e';newS[j - 2] = 'b';newS[j - 3] = 'm';newS[j - 4] = 'u';newS[j - 5] = 'n';j -= 5;}}return new String(newS);} }