Как перевернуть строку после запятой, а затем вывести первую половину строки Java - PullRequest
0 голосов
/ 14 мая 2018

Например, строка grdwe,erwd становится dwregrdwe

У меня большая часть кода, у меня просто проблемы с доступом ко всем ch1 и ch2 в моем коде после цикла for в моем методе. Я думаю, что мне нужно добавить все элементы к ch1 и ch2 в два отдельных массива символов, но я Я не знаю, что для первоначальной инициализации массива он читает только 1 элемент. Я хочу получить доступ ко всем элементам, а затем объединить их. Я в тупике.

И я бы предпочел избегать Stringbuilder, если это возможно

public class reverseStringAfterAComma{
    public void reverseMethod(String word){   

        char ch1 = ' ';
        char ch2 = ' ';
        for(int a=0; a<word.length(); a++)
        {
            if(word.charAt(a)==',')
            {
                for(int i=word.length()-1; i>a; i--)
                {
                    ch1 = word.charAt(i);
                    System.out.print(ch1);
                }
                for (int j=0; j<a; j++)
                {
                    ch2 = word.charAt(j);
                    System.out.print(ch2);
                }
            }
        }

        //System.out.print("\n"+ch1);
        //System.out.print("\n"+ch2);
    } 
    public static void main(String []args){
        reverseStringAfterAComma rsac = new reverseStringAfterAComma();
        String str="grdwe,erwd";
        rsac.reverseMethod(str);
     }
}

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Похоже, что в данный момент у вас есть рабочий код, но вы хотите напечатать / сохранить значение вне циклов for. Просто установите переменную перед вводом циклов и объедините char s в каждом цикле:

String result = "";
for (int a = 0; a < word.length(); a++) {
    if (word.charAt(a) == ',') {
        for (int i = word.length() - 1; i > a; i--) {
            ch1 = word.charAt(i);
            result += ch1;
        }
        for (int j = 0; j < a; j++) {
            ch2 = word.charAt(j);
            result += ch2;
        }
    }
}
System.out.println(result);

Демо

0 голосов
/ 20 мая 2018

Позвольте предложить решение, которое не использует StringBuilder

Вы должны знать, что нет правильной причины не использовать этот класс, так как это хорошо проверено

Первым шагом было бы разделить ваше String на первую найденную запятую (я предположил, что в случае, если их больше одного, остальные являются частью текста для обратного). Для этого мы можем String.split(String regex, int limit).

Предел определяется следующим образом

  • Если предел n больше нуля, то шаблон будет применяться не более n - 1 раз, длина массива будет не более n , а последняя запись массива будет содержать все входные данные, кроме последний сопоставленный разделитель.
  • Если n не является положительным, то шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину.
  • Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а завершающие пустые строки будут отбрасываться.

Пример:

"foobar".split(",", 2) //      {"foobar"}
"foo,bar".split(",", 2) //     {"foo", "bar"}
"foo,bar,far".split(",", 2) // {"foo", "bar,far"}

Так что это может быть использовано в наших интересах здесь:

String text = "Jake, ma I ,dlrow olleh";
String[] splittedText = text.split( ",", 2 ); //will give a maximum of a 2 length array

Знаете, нам просто нужно обратить вспять второй массив, если он существует, используя самый простой алгоритм.

String result;
if ( splittedText.length == 2 ) { //A comma was found
    char[] toReverse = splittedText[1].toCharArray(); //get the char array to revese
    int start = 0;
    int end = toReverse.length - 1;
    while ( start < end ) { //iterate until needed
        char tmp = toReverse[start];
        toReverse[start] = toReverse[end];
        toReverse[end] = tmp;

        start++; //step forward
        end--; //step back
    }
    result = new String( toReverse ) + splittedText[0];
} 

Эта часть должна была быть сделана с StringBuilder, используя

if ( splittedText.length == 2 ){ 
    result = new StringBuilder(splittedText[1]).reverse().toString() + splittedText[0];
}

И если есть только одна ячейка, результат совпадает с исходным текстом

else { //No comma found, just take the original text
    result = text;
}

Тогда нам просто нужно напечатать результат

System.out.println( result );

Привет, мир, я Джейк

0 голосов
/ 14 мая 2018

Вы можете использовать построитель строк, как описано здесь :

Сначала разбейте строку, используя:

String[] splitString = yourString.split(",");

Затем переверните вторую часть строки, используя это:

splitString[1] = new StringBuilder(splitString[1]).reverse().toString();

затем добавьте два раздела следующим образом:

String final = splitString[1] + splitString[0];

А если вы хотите напечатать, просто сделайте:

System.out.print(final);

Окончательный код будет:

String[] splitString = yourString.split(",");
splitString[1] = new StringBuilder(splitString[1]).reverse().toString();
String final = splitString[1] + splitString[0];
System.out.print(final);

Тогда, поскольку вы используете stringbuilder, все, что вам нужно сделать, это импортировать его, поместив его в верхней части кода:

import java.lang.StringBuilder;
...