在java中的字符串中交换几个字符?

时间:2014-08-16 03:22:08

标签: java string

我需要处理一个字符串来交换几个字符以进行简单加密。

 Input : ABCDEFGHIJKLMNOPQRSTUVWXYZ
 Output: NOPQRSTUVWXYZABCDEFGHIJKLM

在上面的过程中,我将琴弦分成两部分,并将前半部分移动到后半部分。

final int mid = (xyz.length()+1) / 2;
String[] spstr = {
    xyz.substring(0, mid),
    xyz.substring(mid),
};
String firstMix=spstr[1]+spstr[0];
System.out.println(firstMix);

现在,我需要将前两个字符与最后两个字符交换

Input : NOPQRSTUVWXYZABCDEFGHIJKLM
Output: LMPQRSTUVWXYZABCDEFGHIJKNO

并将两个字符立即交换到字符串中间的左侧,并紧跟其后的两个字符。

Input :  LMPQRSTUVWXYZABCDEFGHIJKNO
Output : LMPQRSTUVWXABYZCDEFGHIJKNO

交换发生在" YZAB"到" ABYZ"在约输入和输出

有效交换这些字符的最佳方法是什么?我会在这个过程中转换很多字符串。在这种情况下,字符串长度不是常量。

4 个答案:

答案 0 :(得分:2)

我只是创建一个方法,将字符串转换为数组,并使用它们的索引来操作和加密字符。

答案 1 :(得分:2)

您可能想尝试使用StringBuilder类。它为操作字符串提供了许多有用的方法,但避免了在进程中创建大量String对象的问题。

答案 2 :(得分:1)

JAVACODE

最佳方法是将字符串拆分为字符串数组并执行  根据您的要求进行以下处理

  

http://www.compileonline.com/compile_java_online.php用于测试代码

import java.util.Arrays;
        public class HelloWorld{

             public static void main(String []args){

                System.out.println("Hello World");

                String xyz= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                final int mid = (xyz.length()+1) / 2;

                String[] spstr = {
                    xyz.substring(0, mid),
                    xyz.substring(mid)
                };

                String firstMix=spstr[1]+spstr[0];

                String[] array = firstMix.split("");


                //Swap first and last two characters
                for(int i=1;i<3;i++)
                {
                   String temp= array[i];

                   array[i]=array[array.length-i];
                    array[array.length-i]=temp;

                }    



                String str1 = Arrays.toString(array); 
                str1 = str1.substring(1, str1.length()-1).replaceAll(",", "");

                //Swap  two characters left of middle with right of middle
                int  j=2;
                 for(int i=((array.length/2)-2);i<(array.length)/2;i++)
                {
                   String temp= array[i];
                   array[i]=array[array.length/2+j];
                   array[array.length/2+j]=temp;
                   j--;
                }   
                 String str2 = Arrays.toString(array); 
                  str2 = str2.substring(1, str2.length()-1).replaceAll(",", "");
                    System.out.println( firstMix);
                 System.out.println(str1);
                   System.out.println(str2);

             }
        }

答案 3 :(得分:1)

这是大致正确的,除了将字符串长度上的中间字符交换为奇数的未定义情况。评论应该足以理解代码。

public class Main {

    public static void main( String[] args ) {

        char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();

        final int mid = ( chars.length + 1 ) / 2;


        System.out.println( "Mid: " + mid );
        System.out.println( "Start : " + new String( chars ) );

        // Pass one : Swap first half chars with last half chars
        if( ( chars.length % 2 ) == 1 ) {
            /* We swap the characters this way because the left half
             *  is one character longer than the right half. To avoid
             *  unnecessary copies we move the right character to
             *  the index before the left character and save the first
             *  character to be placed at the mid point
             */
            char first = chars[ 0 ];
            for( int l = 1, r = mid; r < chars.length; l++, r++ ) {
                chars[ l - 1 ] = chars[ r ];
                chars[ r ] = chars[ l ];
            }
            chars[ mid - 1 ] = first;
        }
        else {
            for( int l = 0, r = mid; r < chars.length; l++, r++ ) {
                swap( chars, l, r );
            }
        }

        System.out.println( "Pass 1: " + new String( chars ) );

        // Pass two: Swap first two chars with last two chars
        swap( chars, 0, chars.length - 2 );
        swap( chars, 1, chars.length - 1 );

        System.out.println( "Pass 2: " + new String( chars ) );

        // Pass three: Swap middle 4 characters.
        swap( chars, mid - 1, mid + 1 );
        swap( chars, mid - 2, mid );

        System.out.println( "Pass 3: " + new String( chars ) );
    }


    public static void swap( char[] chars, int l, int r ) {
        char tmp = chars[ l ];
        chars[ l ] = chars[ r ];
        chars[ r ] = tmp;
    }
}

我选择使用字符数组进行操作以减少创建的对象数量。在我看来,这为您所要求的提供了最快捷的解决方案。当/如果你澄清未定义的情况我可以编辑代码以提供正确的输出。