これは、文字列を分割せずに特殊文字を含む文字列を逆にする別の方法です。
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()'を使ってワード境界で(つまり、すべての単語の前後に)分割することができると思います。それが本当であれば、言葉を逆転させ、言葉ではない部分文字列を逆転させないでください。 –