我正在尝试转换一些文本,以便每个偶数字符都变为大写。这样可行,但如果单词之间有空格,则代码也会将空格作为字符。因此,例如,如果输入文本是“这是一个测试”,则输出为“tHiS is tEsT”。我希望它忽略空格并将“tHiS iS a TeSt”作为输出。
我现在有以下代码:
private String result;
private String letter;
private void generateText() {
result = "";
String input = editTextInput.getText().toString();
String lowerCase = input.toLowerCase();
char[] charArray = lowerCase.toCharArray();
for(int i=0;i<charArray.length;i++){
if(String.valueOf(charArray[i]).equals(" ")){
//I don't know what to put here
letter = String.valueOf(charArray[i]);
}else{
if(i%2 == 0){
letter = String.valueOf(charArray[i]);
}else if(i%2 == 1){
letter = String.valueOf(charArray[i]).toUpperCase();
}
}
result += letter ;
}
Log.d("result", result);
}
跳过这些空格我该怎么办? 如果可能的话,我也想跳过标点符号,或者一般来说,每个字符都不是字母。
提前致谢!
(对于那些想知道的人,我正在制作一个海绵宝宝文本生成器应用程序)
答案 0 :(得分:4)
如果你想在循环中执行备用逻辑,通常可以使用i % 2 == 0
或(i & 1) == 1
,但由于交替是有条件的,你需要一个变量来存储&#34;状态& #34 ;.通过简单的交替,boolean
变量是显而易见的选择。
此外,不断将每个char
转换为String
对性能不利。只需更新char[]
。
private static String upperEven(String input) {
char[] buf = input.toLowerCase().toCharArray();
boolean upper = false;
for (int i = 0; i < buf.length; i++) {
if (Character.isLetter(buf[i])) {
if (upper)
buf[i] = Character.toUpperCase(buf[i]);
upper = ! upper;
}
}
return new String(buf);
}
测试
System.out.println(upperEven("this IS a TEST"));
输出
tHiS iS a TeSt
代码可以压缩/隐藏到:; - )
private static String upperEven(String s) {
char[] c = s.toCharArray();
boolean t = false;
for (int i = 0; i < c.length; i++)
if (Character.isLetter(c[i]))
c[i] = ((t = ! t) ? Character.toLowerCase(c[i]) : Character.toUpperCase(c[i]));
return new String(c);
}
答案 1 :(得分:0)
This is my solution.
private static void generateText() {
String result = "";
String input = "i am a engineer and student of nit.";
String lowerCase = input.toLowerCase();
Boolean isLower = false;
char[] charArray = lowerCase.toCharArray();
for (int i = 0; i < lowerCase.length(); i++) {
String letter = String.valueOf(charArray[i]);
if (!Character.isLetter(charArray[i])) {
result += letter;
} else {
if(isLower)
letter = letter.toUpperCase();
result += letter;
isLower = !isLower;
}
}
System.out.println(result);
}