思路:别的语言都可以不用辅助数组,我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++; } }//getcount char[] 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); } }