我正在尝试存储一个字符串,并确定它是大写/小写字母还是数字,如果字符是小写字母,则重新显示大写字符,如果字符是大写字母,则重新显示小写字符,如果字符是数字,则将其显示为星号。我可以用数字来表示,但是如果我为字母包含.toString()、.toLowerCase()或.toUpperCase(),程序就会继续循环。我该怎么办?
public class CharacterArray {
public static void main(String[] args) {
StringBuilder input = new StringBuilder("800 Test St NY");
for (int i = 0; i < input.length(); i++) {
System.out.println(input.charAt(i));
if(Character.isDigit(input.charAt(i))){
input.replace(i,i+1,"*");
}
else if(Character.isUpperCase(input.charAt(i))) {
input.replace(i, i+1,input.toString().toLowerCase());
}
else if(Character.isLowerCase(input.charAt(i))) {
input.replace(i, i+1,input.toString().toUpperCase());
}
System.out.println(input);
}
}
}发布于 2014-09-19 05:44:03
执行此操作时:
input.replace(i, i+1, input.toString().toLowerCase());您正在用整个字符串(小写)替换一个字符,这使得input越来越长,因此您永远不会到达它的末尾。
而是:
input.replace(i, i+1, input.substring(i,i+1).toLowerCase());类似地,您可以将其转换为大写。
编辑:修复了将错误的参数类型传递给replace的问题。
Volune的答案看起来更好。使用它。
发布于 2014-09-19 05:49:56
因为您只想替换一个字符,所以应该使用StringBuilder#setCharAt
if (Character.isDigit(input.charAt(i))) {
input.setCharAt(i, '*');
} else if (Character.isUpperCase(input.charAt(i))) {
input.setCharAt(i, Character.toLowerCase(input.charAt(i)));
} else if (Character.isLowerCase(input.charAt(i))) {
input.setCharAt(i, Character.toUpperCase(input.charAt(i)));
}这样你就知道你不会改变字符串的长度。
发布于 2014-09-19 05:46:31
使用StringUtils.swapCase
String res = StringUtils.swapCase(original).replaceAll("\\d","*");https://stackoverflow.com/questions/25922801
复制相似问题