7

、、などのString一時変数を使用せずにJavaでリバースすることは可能ですか?StringChar[]StringBuilder

int、またはのみを使用できますint[]

4

11 に答える 11

11
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カウンターしかないことです。

于 2011-09-30T15:24:00.540 に答える
10

Java Stringクラスのオブジェクトは不変です。作成後に、その内容を変更することはできません。

ローカル変数の使用を回避する方法を見つけたとしても、少なくとも2つの一時オブジェクト(1つは最終結果用、もう1つは中間値用)が必要になります

編集:

とはいえ、使用int[]できるのでごまかすことができるかもしれません。

charに割り当てることができるためint、を使用して、文字値を逆の順序で配列String.charAt()を作成できます。または、一時にコピーされる配列を取得するためintに使用できる場合があります。String.toCharArray()charint[]

次に、元の文字列への参照を保持する変数(または許可されている場合は結果変数)を使用して、空の文字列(直接割り当てまたはで簡単に取得可能)から開始し、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));
}
于 2011-09-30T15:16:50.127 に答える
5
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

一時変数はありません!:)

于 2011-09-30T15:21:01.127 に答える
5

多くの方法の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);
于 2011-09-30T15:23:50.337 に答える
2
public String reverseStr(String str) {
    if (str.length() <= 1) {
        return str;
    }

    return reverseStr(str.substring(1)) + str.charAt(0);

}
于 2015-02-02T12:40:33.550 に答える
1

intを使用できるため、intにchar値を割り当てることができます。

String aString = "abc";

int intChar = aString.charAt(0);

aString.charAt(2)に割り当てるには、intからcharに変換し直す必要があります。

そこから理解できると思います。

于 2011-09-30T15:21:43.527 に答える
1

まず、逆の方法で文字列をそれ自体に追加します。次に、後半を取り出します。

  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);
    }

}
于 2015-02-02T06:31:16.077 に答える
0

コレクションを使用せずに、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

それが役に立てば幸い :)

于 2016-09-26T11:08:50.857 に答える
0
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));
}
}
于 2017-05-17T11:03:02.203 に答える
0
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);
}

ループ変数を除く。

于 2018-01-23T10:06:26.037 に答える
-1

クラスjava.lang.StringBuilderを使用できます。

String reservedString = new StringBuilder(str).reserve().toString();
于 2013-05-15T22:59:14.033 に答える