如何在逗号后反转String然后打印String Java的前半部分

时间:2018-05-14 16:08:45

标签: java loops char

例如,字符串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 :(得分:1)

您可以按照here所述使用字符串构建器:

首先使用以下方法拆分字符串:

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;

答案 1 :(得分:0)

您似乎目前有工作代码,但希望打印/保存for循环之外的值。只需在输入循环之前设置变量,并在每个循环中连接char

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

Demo

答案 2 :(得分:0)

让我们提出一个不使用StringBuilder

的解决方案

你应该知道没有正确的理由不使用该课程,因为这是经过充分测试的

第一步是将String拆分为找到的第一个逗号(我假设,如果有多个,则其余部分是要反转的文本的一部分)。为此,我们可以String.split(String regex, int limit)

限制是这样定义的

  
      
  • 如果极限n大于零,则图案最多应用n - 1次,阵列的长度不大于n 且阵列&#39;最后一个条目将包含除最后一个匹配分隔符之外的所有输入。
  •   
  • 如果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 );
  

你好世界,我是杰克