繁体   English   中英

如何在逗号后反转字符串,然后打印字符串Java的第一部分

[英]How to reverse a String after a comma and then print the 1st half of the String Java

例如String grdwe,erwd变成dwregrdwe

我有大部分代码,在我的方法中执行for循环后,我在访问代码中的所有ch1和ch2时遇到了麻烦,我想我必须将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);
     }
}

您可以使用字符串生成器所描述的在这里

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

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;

看来您当前有正常工作的代码,但是希望在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);

演示

让我们提出一个不使用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 );

你好,世界,我是杰克

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM