这是另一种方式来扭转特殊字符的字符串,不要把字符串。
- 将
String
转换为char
数组。
- 编写一个参数
char[]
并在char[]
上循环的方法。
- 编写一个方法来检查
char[index]
是否是一个字母表。
- 当
char[index]
不是字母表时,存储起始索引和结束索引,并将char[]
中的元素与开始索引和 结束索引进行交换。
这里是工作code:
public static boolean isAlphabet(char x) {
return ((x >= 'A' && x <= 'Z') || (x >= 'a' && x <= 'z'));
}
public static void reverse(char ch[]) {
int l = 0;
int startIndex = 0;
int endIndex = 0;
while (l < ch.length - 1) {
if (isAlphabet(ch[l])) {
l++;
} else {
endIndex = l - 1;
while (startIndex < endIndex){
char temp = ch[startIndex];
ch[startIndex] = ch[endIndex];
ch[endIndex] = temp;
endIndex--;
startIndex++;
}
l++;
startIndex = l;
}
}
}
public static void main(String[] args) throws java.lang.Exception {
String inputString = "comp!ex, ex.amp!e";
char[] ch = inputString.toCharArray();
reverse(ch);
String reverseString = new String(ch);
System.out.println(reverseString);
}
输入:comp!ex, ex.amp!e
输出:pmoc!xe, xe.pma!e
通过与whitespace
分裂String
,您可以使用相同的isAlphabet
和reverse
方法。
Code:
String inputString = "comp!ex, ex.amp!e";
String[] splitArray = inputString.split("\\s");
char[] ch1 = splitArray[0].toCharArray();
reverse(ch1);
char[] ch2 = splitArray[1].toCharArray();
reverse(ch2);
StringBuilder reverseString = new StringBuilder();
reverseString.append(ch1);
reverseString.append(" ");
reverseString.append(ch2);
System.out.println(reverseString.toString());
输出:
Input : comp!ex, ex.amp!e
Output: pmoc!ex, xe.pma!e
你得到的输出是什么?您是否尝试过使用调试器来找出问题所在? – Jens
您的方法的部分问题是您丢弃了您的分隔符。如果你不使用'String.split'则更容易。 –
如果你能找到正确的正则表达式,我相信你可以使用'String.split()'在单词边界(即每个单词之前和之后)进行分割。如果那是真的,你只需要反转这些单词而不是颠倒那些不是单词的子串。 –