如何将数组的值放入另一个数组?

时间:2010-07-28 03:56:16

标签: java arrays

String input = txtInput.getText();

char[] charArray =  input.toCharArray();
char[] flipArray = null;
System.out.println(charArray.length);
for (int i = 0; i < charArray.length ; i++) {
    System.out.println(charArray[i]);

抱歉,如果代码没有多大意义。

charArray取自JTextField。

所以代码应该做这样的事情。

  1. 接收消息并翻转每2个字符。也就是说,切换第1和第2个字符,切换第3个和第4个字符等;
  2. 例如,“你无法阅读我的信息!”加密后将是“oy uac'n terdam yemssga!e”;
  3. charArray将是一条消息,上面写着“你无法阅读我的消息!” flipArray将传递“oY uac'n terdam yemssga!e”的信息。

    如何编写一个循环,使其成为......

    charArray[0] = flipArray[1]
    charArray[1] = flipArray[0]
    charArray[2] = flipArray[3]
    charArray[3] = flipArray[2]
    charArray[4] = flipArray[5]
    charArray[5] = flipArray[4]
    

    charArray的值取自JTextField

    我在NetBeans IDE 6.5.1上执行此操作。

3 个答案:

答案 0 :(得分:3)

我将退一步看看大局并提出解决问题的方法:

System.out.println(
   "012345".replaceAll("(.)(.)", "$2$1")
);
// "103254"

也就是说,给定String ss.replaceAll("(.)(.)", "$2$1"))会返回一个新字符串,其中s中的每个相邻字符对都会被交换。如果s具有奇数长度,则最后一个字符仍然未被切换。如果字符串可以包含换行符,则使用(?s)嵌入式Pattern.DOTALL

本质上,模式是..(即“任意两个字符”),但每个.被括号括起来创建捕获组,因此捕获的匹配可用于替换。

  MATCH: (.)(.)
          1  2
 REPLACE
   WITH:  $2$1

在Java正则表达式中,例如替换字符串中的$1指的是匹配中捕获的组1。

参考


变体形式

这些是为了更多的教学价值而提供的:

    System.out.println(
       "abcdefg".replaceAll("(.)(.)", "$1[$2]")
    );
    // "a[b]c[d]e[f]g"

    System.out.println(
       "> Regular expressions: now you have two problems!"
          .replaceAll("(.)(.)", "$2$1")
    );
    // " >eRugal rxerpseisno:sn woy uoh va ewt orpboelsm!"

    System.out.println(
       "> Regular expressions: now you have two problems!"
          .replaceAll("(\\w)(\\w)", "$2$1")
    );
    // "> eRugalr xerpseisnos: onw oyu ahev wto rpboelsm!"

    System.out.println(
       "Wow! Really?? That's awesome!!!"
          .replaceAll("(.)([!?]+)", "$1$1$1$2$2")
    );
    // "Wowww!! Reallyyy???? That's awesomeee!!!!!!"

答案 1 :(得分:2)

char[] flipArray = new char[charArray.length];
...
    charArray[i] = flipArray[i^1];

注意处理奇数编号数组的最后一个元素。

^是独占或操作符。

没有苦恼:

    charArray[i] = flipArray[(i/2)*2 + 1-(i%2)];

%是模数运算符(注意带负数的奇怪行为)。

您可以使用NIO缓冲区以非常聪明的方式进行操作,但我不会在当天的这个时间尝试。

答案 2 :(得分:2)

胡闹。

for( int i = 0; i < charArray.length; i+= 2 )
{
   charArray[i] = flipArray[i+1];
   charArray[i+1] = flipArray[i];
}

我假设0,1转到1,02,3转到3,2等等。

我认为这就是你的意思:

String input = ...
StringBuilder builder = new StringBuilder();

for( int i = 0; i < input.length(); i += 2 )
{
   //guard against odd text lengths
   if( i+1 < input.length() )
   {
      builder.append( input.charAt(i+1) );
   }   
   builder.append( input.charAt(i) );
}

String flippedText = builder.toString();