web-dev-qa-db-ja.com

Javaで文字列を反転する

私は"Hello World"hiという名前のString変数に保持しています。

印刷する必要がありますが、裏返しました。

これどうやってするの?これを行うための、Javaに既に組み込まれているある種の関数があることは理解しています。

関連: 「Hello World」文字列の各単語をJavaで反転します

414
Ron

これを使うことができます:

new StringBuilder(hi).reverse().toString()

あるいは、JDK 1.5より前のバージョンでは、StringBuilderの代わりにJava.util.StringBufferを使用します - それらは同じAPIを持ちます。同時実行性の懸念がない場合には、StringBuilderが現在好まれていることを指摘してくれてありがとうコメンテーター。

892
Daniel Brockman

StringBuilderまたはStringBufferを使用できないOnline Judges problemsの場合は、次のようにchar[]を使用してin placeを実行できます。

public static String reverse(String input){
    char[] in = input.toCharArray();
    int begin=0;
    int end=in.length-1;
    char temp;
    while(end>begin){
        temp = in[begin];
        in[begin]=in[end];
        in[end] = temp;
        end--;
        begin++;
    }
    return new String(in);
}
101
Sami Eltamawy
public static String reverseIt(String source) {
    int i, len = source.length();
    StringBuilder dest = new StringBuilder(len);

    for (i = (len - 1); i >= 0; i--){
        dest.append(source.charAt(i));
    }

    return dest.toString();
}

http://www.Java2s.com/Code/Java/Language-Basics/ReverseStringTest.htm

61
Kevin Bowersox
String string="whatever";
String reverse = new StringBuffer(string).reverse().toString();
System.out.println(reverse);
57
Luchian Grigore

私は次の2つの方法でこれをやっています。

文字列を逆にします:

public static void main(String[] args) {
    // Using traditional approach
    String result="";
    for(int i=string.length()-1; i>=0; i--) {
        result = result + string.charAt(i);
    }
    System.out.println(result);

    // Using StringBuffer class
    StringBuffer buffer = new StringBuffer(string);
    System.out.println(buffer.reverse());    
}

WORDSによる逆の文字列:

public static void reverseStringByWords(String string) {
    StringBuilder stringBuilder = new StringBuilder();
    String[] words = string.split(" ");

    for (int j = words.length-1; j >= 0; j--) {
        stringBuilder.append(words[j]).append(' ');
    }
    System.out.println("Reverse words: " + stringBuilder);
}
26
VicJordan

StringBufferの下にJava 6のAPIを見てみましょう

String s = "sample";
String result = new StringBuffer(s).reverse().toString();
19
Andrew Briggs

これは再帰を使った例です。

public void reverseString() {
    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String reverseAlphabet = reverse(alphabet, alphabet.length()-1);
}

String reverse(String stringToReverse, int index){
    if(index == 0){
        return stringToReverse.charAt(0) + "";
    }

    char letter = stringToReverse.charAt(index);
    return letter + reverse(stringToReverse, index-1);
}
17
C0D3LIC1OU5

これが低レベルの解決策です。

import Java.util.Scanner;

public class class1 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String inpStr = in.nextLine();
        System.out.println("Original String :" + inpStr);
        char temp;
        char[] arr = inpStr.toCharArray();
        int len = arr.length;
        for(int i=0; i<(inpStr.length())/2; i++,len--){
            temp = arr[i];
            arr[i] = arr[len-1];
            arr[len-1] = temp;
        }

        System.out.println("Reverse String :" + String.valueOf(arr));
    }
}
12
Artur Grigio

文字列を反転させる への以下の方法( _ xまたは_ を使用)は記載されていないので、文字列を反転させるためにこの方法を付けています。

アルゴリズム は次のものに基づいています。

1.(A XOR B)XOR B = A

2.(A XOR B)XOR A = B

コードスニペット:

public class ReverseUsingXOR {
    public static void main(String[] args) {
        String str = "prateek";
        reverseUsingXOR(str.toCharArray());
    }   

    /*Example:
     * str= prateek;
     * str[low]=p;
     * str[high]=k;
     * str[low]=p^k;
     * str[high]=(p^k)^k =p;
     * str[low]=(p^k)^p=k;
     * 
     * */
    public static void reverseUsingXOR(char[] str) {
        int low = 0;
        int high = str.length - 1;

        while (low < high) {
            str[low] = (char) (str[low] ^ str[high]);
            str[high] = (char) (str[low] ^ str[high]);   
            str[low] = (char) (str[low] ^ str[high]);
            low++;
            high--;
        }

        //display reversed string
        for (int i = 0; i < str.length; i++) {
            System.out.print(str[i]);
        }
    }

}

出力:

キーパープ

10
Prateek Joshi

私はスタックを使って楽しんでみました。ここに私のコード:

public String reverseString(String s) {
    Stack<Character> stack = new Stack<Character>();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        stack.Push(s.charAt(i));
    }
    while (!stack.empty()) {
        sb.append(stack.pop());
    }
    return sb.toString();

}
10
Enrico Giurin

他の人が指摘したように、好ましい方法は次のものを使うことです。

new StringBuilder(hi).reverse().toString()

しかし、あなたがこれをあなた自身で実行したいのであれば、私は残りの反応に欠陥があることを恐れています。

その理由は、Stringは可変長エンコーディングに従ってchar[]配列にエンコードされた Unicode ポイントのリストを表すからです。 UTF-16 ).

つまり、一部のコードポイントは配列の1つの要素(1つのコード単位)を使用しますが、2つを使用するため、1つの単位として扱う必要がある文字のペアがある可能性があります。

public static String reverseString(String s) {
    char[] chars = new char[s.length()];
    boolean twoCharCodepoint = false;
    for (int i = 0; i < s.length(); i++) {
        chars[s.length() - 1 - i] = s.charAt(i);
        if (twoCharCodepoint) {
            swap(chars, s.length() - 1 - i, s.length() - i);
        }
        twoCharCodepoint = !Character.isBmpCodePoint(s.codePointAt(i));
    }
    return new String(chars);
}

private static void swap(char[] array, int i, int j) {
    char temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

public static void main(String[] args) throws Exception {
    FileOutputStream fos = new FileOutputStream("C:/temp/reverse-string.txt");
    StringBuilder sb = new StringBuilder("Linear B Syllable B008 A: ");
    sb.appendCodePoint(65536); //http://unicode-table.com/es/#10000
    sb.append(".");
    fos.write(sb.toString().getBytes("UTF-16"));
    fos.write("\n".getBytes("UTF-16"));
    fos.write(reverseString(sb.toString()).getBytes("UTF-16"));
}
7
idelvall

最小限の行数でとてもシンプルです

public class ReverseString {
    public static void main(String[] args) {
        String s1 = "neelendra";
        for(int i=s1.length()-1;i>=0;i--)
            {
                System.out.print(s1.charAt(i));
            }
    }
}
4
Neelendra

これは私のためのトリックでした

public static void main(String[] args) {

    String text = "abcdefghijklmnopqrstuvwxyz";

    for (int i = (text.length() - 1); i >= 0; i--) {
        System.out.print(text.charAt(i));
    }
}
3
DarkMental

1.文字配列を使う:

public String reverseString(String inputString) {
    char[] inputStringArray = inputString.toCharArray();
    String reverseString = "";
    for (int i = inputStringArray.length - 1; i >= 0; i--) {
        reverseString += inputStringArray[i];
    }
    return reverseString;
}

2. StringBuilderを使用する:

public String reverseString(String inputString) {
    StringBuilder stringBuilder = new StringBuilder(inputString);
    stringBuilder = stringBuilder.reverse();
    return stringBuilder.toString();
}

OR

return new StringBuilder(inputString).reverse().toString();
3
Avijit Karmakar
System.out.print("Please enter your name: ");
String name = keyboard.nextLine();

String reverse = new StringBuffer(name).reverse().toString();
String rev = reverse.toLowerCase();
System.out.println(rev);

この方法を使用して、名前を逆方向に小文字に変換しました。

3
Stormhawks

手順:

Split()を使って文字列を分割することができます。逆ループを使って文字を追加します。


コードスニペット:

class test
{
  public static void main(String args[]) 
  {
      String str = "world";
      String[] split= str.split("");

      String revers = "";
      for (int i = split.length-1; i>=0; i--)
      {
        revers += split[i];
      }
      System.out.printf("%s", revers);
   }  
}

 //output : dlrow

2
rashedcs

上記の解決策はすべて優れていますが、ここでは再帰的プログラミングを使用して逆ストリングを作成しています。

これは、逆引き文字列を再帰的に作成する方法を探している人に役立ちます。

public class ReversString {

public static void main(String args[]) {
    char s[] = "Dhiral Pandya".toCharArray();
    String r = new String(reverse(0, s));
    System.out.println(r);
}

public static char[] reverse(int i, char source[]) {

    if (source.length / 2 == i) {
        return source;
    }

    char t = source[i];
    source[i] = source[source.length - 1 - i];
    source[source.length - 1 - i] = t;

    i++;
    return reverse(i, source);

}

}
2
Dhiral Pandya
public class Test {

public static void main(String args[]) {
   StringBuffer buffer = new StringBuffer("Game Plan");
   buffer.reverse();
   System.out.println(buffer);
 }  
}
2

Stringを逆にするための1つの自然な方法は、StringTokenizerとスタックを使うことです。 Stackは、使いやすい後入れ先出し(LIFO)のオブジェクトのスタックを実装するクラスです。

String s = "Hello My name is Sufiyan";

前方のスタックに置く

Stack<String> myStack = new Stack<>();
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens()) {
     myStack.Push(st.nextToken());
}

スタックを後方に印刷する

System.out.print('"' + s + '"' + " backwards by Word is:\n\t\"");
while (!myStack.empty()) {
  System.out.print(myStack.pop());
  System.out.print(' ');
}

System.out.println('"');
2
Sufiyan Ghori
    public String reverse(String s) {

        String reversedString = "";
        for(int i=s.length(); i>0; i--) {
            reversedString += s.charAt(i-1);
        }   

        return reversedString;
    }
2
Dom Shahbazi

ただの楽しみのために.. :)

Algorithm (str,len)
char reversedStr[] =new reversedStr[len]

0からlen/2までiをたどり、その後

reversedStr[i]=str[len-1-i]  
reversedStr[len-1=i]=str[i]
return reversedStr;

時間の複雑さ:O(n)

空間の複雑さ:O(n)

public class Reverse {
    static char reversedStr[];

    public static void main(String[] args) {
        System.out.println(reversestr("jatin"));
    }


    private static String reversestr(String str) {
        int strlen = str.length();
        reversedStr = new char[strlen];

        for (int i = 0; i <= strlen / 2; i++) {
            reversedStr[i] = str.charAt(strlen - 1 - i);
            reversedStr[strlen - 1 - i] = str.charAt(i);

        }
        return new String(reversedStr);
    }

}
2
jatin Goyal
    public static void reverseString(String s){
        System.out.println("---------");
        for(int i=s.length()-1; i>=0;i--){
            System.out.print(s.charAt(i));    
        }
        System.out.println(); 

    }
1
Mutlu
public static void main(String[] args) {
    String str = "Prashant";
    int len = str.length();
    char[] c = new char[len];
    for (int j = len - 1, i = 0; j >= 0; j--, i++) {
        c[i] = str.charAt(j);
    }
    str = String.copyValueOf(c);
    System.out.println(str);
}
1
Prashant Kumar

再帰:

 public String stringReverse(String string) {
    if (string == null || string.length() == 0) {
        return string;
    }
    return stringReverse(string.substring(1)) + string.charAt(0);
 }
1
connect2krish
public void reverString(){
System.out.println("Enter value");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
 try{

  String str=br.readLine();
  char[] charArray=str.toCharArray();
  for(int i=charArray.length-1; i>=0; i--){
   System.out.println(charArray[i]);
  }
  }
   catch(IOException ex){
  }
1
Deepak Singh

これも試すことができます。

public class StringReverse {
    public static void main(String[] args) {
        String str = "Dogs hates cats";
        StringBuffer sb = new StringBuffer(str);
        System.out.println(sb.reverse());
    }
}
1
Anurag Goel

public String reverseWords(String s){

    String reversedWords = "";

    if(s.length()<=0) {
        return reversedWords;
    }else if(s.length() == 1){
        if(s == " "){
            return "";
        }
        return s;
    }

    char arr[] = s.toCharArray();
    int j = arr.length-1;
    while(j >= 0 ){
        if( arr[j] == ' '){
            reversedWords+=arr[j];
        }else{
            String temp="";
            while(j>=0 && arr[j] != ' '){
                temp+=arr[j];
                j--;
            }
            j++;
            temp = reverseWord(temp);
            reversedWords+=temp;
        }
        j--;

    }

    String[] chk = reversedWords.split(" ");

    if(chk == null || chk.length == 0){
        return "";
    }

    return reversedWords;



}

public String reverseWord(String s){

    char[] arr = s.toCharArray();

    for(int i=0,j=arr.length-1;i<=j;i++,j--){
        char tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
    return String.valueOf(arr);

}
1
rvd

誰もがここで文字列を反転する方法を提案します。答えの読者であるあなたが興味を持っているのであれば、\u202Eunicodeを使った私のやり方がここにあります。

public static String reverse(String s) {
        return "\u202E" + s;
}

here からテストできます。

1
snr
    //Solution #1 -- Using array and charAt()
    String name = "reverse"; //String to reverse
    Character[] nameChar =  new Character[name.length()]; // Declaring a character array with length as length of the String which you want to reverse.
    for(int i=0;i<name.length();i++)// this will loop you through the String
    nameChar[i]=name.charAt(name.length()-1-i);// Using built in charAt() we can fetch the character at a given index. 
    for(char nam:nameChar)// Just to print the above nameChar character Array using an enhanced for loop
    System.out.print(nam);


    //Solution #2 - Using StringBuffer and reverse ().
    StringBuffer reverseString = new StringBuffer("reverse");
    System.out.println(reverseString.reverse()); //reverse () Causes the character sequence to be replaced by the reverse of the sequence.
1
abhi
public static String revString(String str){
    char[] revCharArr = str.toCharArray();
    for (int i=0; i< str.length()/2; i++){
        char f = revCharArr[i];
        char l = revCharArr[str.length()-i-1];
        revCharArr[i] = l;
        revCharArr[str.length()-i-1] = f;
    }
    String revStr = new String(revCharArr);
    return revStr;
}

それはあなたがタイプした値を得て、それを逆に返します;)

public static  String reverse (String a){
    char[] rarray = a.toCharArray();
    String finalvalue = "";
    for (int i = 0; i < rarray.length; i++)
    {
        finalvalue += rarray[rarray.length - 1 - i];
    }   
return finalvalue;

}

0
Kelk

Javaの単純なForループ

 public void reverseString(char[] s) {
    int length = s.length;
    for (int i = 0; i < s.length / 2; i++) {
        // swaping character
        char temp = s[length - i - 1];
        s[length - i - 1] = s[i];
        s[i] = temp;
    }
}
0
Sameer Shrestha
import Java.util.Scanner;

public class Test {

    public static void main(String[] args){
        Scanner input = new Scanner (System.in);
        String Word = input.next();
        String reverse = "";
        for(int i=Word.length()-1; i>=0; i--)
            reverse += Word.charAt(i);
        System.out.println(reverse);        
    }
}

単純なforループを使いたいのなら!

0
Apetrei Ionut
package logicprogram;
import Java.io.*;

public class Strinrevers {
public static void main(String args[])throws IOException
{
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.println("enter data");
    String data=br.readLine();
    System.out.println(data);
    String str="";
    char cha[]=data.toCharArray();

    int l=data.length();
    int k=l-1;
    System.out.println(l);


    for(int i=0;k>=i;k--)
    {

        str+=cha[k];


    }
    //String text=String.valueOf(ch);
    System.out.println(str);

}

}
0
kumaravel j
StringBuilder s = new StringBuilder("racecar");
    for (int i = 0, j = s.length() - 1; i < (s.length()/2); i++, j--) {
        char temp = s.charAt(i);
        s.setCharAt(i, s.charAt(j));
        s.setCharAt(j, temp);
    }

    System.out.println(s.toString());
0
camel-man

文字シーケンス(または)文字列ひもの家族

String testString = "Yashwanth@777"; // ~1 1⁄4→D800₁₆«2²⁰

Java 8 Stream APIを使用する

最初に、メソッドCharSequence.chars()を使用してStringをストリームに変換し、次にメソッドIntStream.rangeを使用して数字の連続ストリームを生成します。次に、この一連のストリームをStringにマップします。

public static String reverseString_Stream(String str) {
    IntStream cahrStream = str.chars();
    final int[] array = cahrStream.map( x -> x ).toArray();

    int from = 0, upTo = array.length;
    IntFunction<String> reverseMapper = (i) -> ( Character.toString((char) array[ (upTo - i) + (from - 1) ]) );

    String reverseString = IntStream.range(from, upTo) // for (int i = from; i < upTo ; i++) { ... }
            .mapToObj( reverseMapper )                 // array[ lastElement ]
            .collect(Collectors.joining())             // Joining stream of elements together into a String.
            .toString();                               // This object (which is already a string!) is itself returned.

    System.out.println("Reverse Stream as String : "+ reverseString);
    return reverseString;
}

従来のforループを使用する

あなたが文字列を逆にしたいならば、それから我々はこれらのステップに従う必要があります。

  • 文字列を文字の配列に変換します。
  • 逆の順序で配列を繰り返し、最後の文字まで一時文字列変数に各文字を追加します。
public static String reverseString( String reverse ) {
    if( reverse != null && reverse != "" && reverse.length() > 0 ) {

        char[] arr = reverse.toCharArray();
        String temp = "";
        for( int i = arr.length-1; i >= 0; i-- ) {
            temp += arr[i];
        }
        System.out.println("Reverse String : "+ temp);
    }
    return null;
}

StringBufferまたはStringBuilderクラスから提供される逆のメソッドを使用する簡単な方法

StringBuilderとStringBufferは可変の文字シーケンスです。つまり、これらのオブジェクトの値を変更できるということです。

StringBuffer buffer = new StringBuffer(str);
System.out.println("StringBuffer - reverse : "+ buffer.reverse() );

String builderString = (new StringBuilder(str)).reverse().toString;
System.out.println("StringBuilder generated reverse String : "+ builderString  );

StringBufferはStringBuilderと同じメソッドを持ちますが、StringBufferの各メソッドは同期されるのでスレッドセーフです。

0
Yash

文字列を反転する方法はたくさんあります。

1.文字列をバイトに変換する:getBytes()メソッドは入力文字列をbytes []に変換するために使用されます。

import Java.lang.*;
import Java.io.*;
import Java.util.*;
class ReverseString{
public static void main(String[] args)
{
    String input = "GeeksforGeeks";
    byte [] strAsByteArray = input.getBytes();
    byte [] result =  new byte [strAsByteArray.length];

    for (int i = 0; i<strAsByteArray.length; i++)
        result[i] = 
         strAsByteArray[strAsByteArray.length-i-1];

    System.out.println(new String(result));
}
}

2.文字列から文字配列への変換:反転する文字列を入力します。 (個人的に推奨)

import Java.lang.*;
import Java.io.*;
import Java.util.*;


class ReverseString{
public static void main(String[] args)
{
    String input = "GeeksForGeeks";

    // convert String to character array
    // by using toCharArray
    char[] try1 = input.toCharArray();

    for (int i = try1.length-1; i>=0; i--)
        System.out.print(try1[i]);
}
}

3. ArrayListオブジェクトを使用する:組み込みメソッドtoCharArray()を使用して、入力文字列を文字配列に変換する。次に、配列の文字をArrayListオブジェクトに追加します。 JavaもCollectionsクラスのためにreverse()メソッドを組み込んでいます。 Collectionsクラスのreverse()メソッドはリストオブジェクトを受け取るので、リストを逆にするために、文字のリストの一種であるLinkedListオブジェクトを渡します。

import Java.lang.*;
import Java.io.*;
import Java.util.*;

 class ReverseString{

public static void main(String[] args)
{
    String input = "Geeks For Geeks";
    char[] hello = input.toCharArray();
    List<Character> trial1 = new ArrayList<>();

    for (char c: hello)
        trial1.add(c);

    Collections.reverse(trial1);
    ListIterator li = trial1.listIterator();
    while (li.hasNext())
        System.out.print(li.next());
}
}
0
Sahil Nagpal