、、などのString
一時変数を使用せずにJavaでリバースすることは可能ですか?String
Char[]
StringBuilder
int
、またはのみを使用できますint[]
。
String reverseMe = "reverse me!";
for (int i = 0; i < reverseMe.length(); i++) {
reverseMe = reverseMe.substring(1, reverseMe.length() - i)
+ reverseMe.substring(0, 1)
+ reverseMe.substring(reverseMe.length() - i, reverseMe.length());
}
System.out.println(reverseMe);
出力:
!em esrever
楽しみのために、もちろんStringBufferを使用する方が良いでしょう。ここでは、反復ごとに新しい文字列を作成しています。唯一の違いは、新しい参照を導入しておらず、intカウンターしかないことです。
Java Stringクラスのオブジェクトは不変です。作成後に、その内容を変更することはできません。
ローカル変数の使用を回避する方法を見つけたとしても、少なくとも2つの一時オブジェクト(1つは最終結果用、もう1つは中間値用)が必要になります。
編集:
とはいえ、使用int[]
できるのでごまかすことができるかもしれません。
char
に割り当てることができるためint
、を使用して、文字値を逆の順序で配列String.charAt()
を作成できます。または、一時にコピーされる配列を取得するためint
に使用できる場合があります。String.toCharArray()
char
int[]
次に、元の文字列への参照を保持する変数(または許可されている場合は結果変数)を使用して、空の文字列(直接割り当てまたはで簡単に取得可能)から開始し、String.substring()
を使用String.concat()
して最終結果を作成します。
ただし、C / C ++の場合のように、文字をインプレースで交換することはできません。
編集2:
StringBuffer/Buildersを内部的に使用しない私のバージョンは次のとおりです。
int r[] = new int[s.length()];
int idx = r.length - 1;
for (int i : s.toCharArray()) {
r[idx--] = i;
}
s = s.substring(0, 0);
for (int i : r) {
s = s.concat(String.valueOf((char)i));
}
String s = "Hello World!";
for(int i = 0; i < s.length(); i++)
{
s = s.substring(1, s.length() - i) + s.charAt(0) + s.substring(s.length() - i);
}
System.out.println(s); // !dlroW olleH
一時変数はありません!:)
多くの方法の1つ:
String str = "The quick brown fox jumps over the lazy dog";
int len = str.length();
for (int i = (len-1); i >= 0; --i)
str += str.charAt(i);
str = str.substring(len);
System.out.println(str);
public String reverseStr(String str) {
if (str.length() <= 1) {
return str;
}
return reverseStr(str.substring(1)) + str.charAt(0);
}
intを使用できるため、intにchar値を割り当てることができます。
String aString = "abc";
int intChar = aString.charAt(0);
aString.charAt(2)に割り当てるには、intからcharに変換し直す必要があります。
そこから理解できると思います。
まず、逆の方法で文字列をそれ自体に追加します。次に、後半を取り出します。
public class RevString {
public static void main(String[] args) {
String s="string";
for(int i=s.length()-1;i>=0;i--){
s+=s.charAt(i);
}
s=s.substring(s.length()/2, s.length());
System.out.println(s);
}
}
コレクションを使用せずに、StringBulider、StringBuffer、またはtemp配列は文字列を逆にします。シンプルで鮮明:
public static void main(String[] args) {
String test = "Hello World";
String rev = "";
Pattern p = Pattern.compile("[\\w|\\W]");
Matcher m = p.matcher(test);
while (m.find()) {
rev = m.group()+rev;
}
System.out.println("Reverse==" + rev);
}
出力
Reverse == dlroW olleH
それが役に立てば幸い :)
public class Test {
static St`enter code here`ring reverseString(String str) {
for (int i = 0; i < str.length() / 2; i++) {
if (i == 0) {
str = str.charAt(str.length() - 1 - i) + str.substring(i + 1, str.length() - 1 - i) + str.charAt(i);
} else {
str = str.substring(0, i) + str.charAt(str.length() - 1 - i)
+ str.substring(i + 1, str.length() - 1 - i) + str.charAt(i)
+ str.substring(str.length() - i, str.length());
}
}
return str;
}
public static void main(String args[]) {
String s = "ABCDE";
System.out.println(Test.reverseString(s));
}
}
String str = "Welcome";
for(int i=0;i<str.length();){
System.out.print(str.charAt(str.length()-1));
str = str.substring(0,str.length()-1);
}
ループ変数を除く。
クラスjava.lang.StringBuilderを使用できます。
String reservedString = new StringBuilder(str).reserve().toString();