2014-12-02 75 views
1

能有人给我如何分割字符串的例子你争我夺的字母爪哇 - 混淆的字母

我能抢的话,但它改变的话长度之前太

例子:

输入:你好我的名字是乔恩

输出:电子imanoJs我nlolHe

但它应该是这样的

输入:你好我的名字是乔恩

输出:Hlelo我nmae是乔恩

所以第一个和最后一个字母应该留在原地

这里是我的代码到目前为止

public class MixUp{ 
    public static void main(String[] args){ 
     String cards="Hello my Name is Jon, nice to meet you"; 
     System.out.println("Input String = " + cards); 
     cards = shuffle(cards); 
     System.out.println("Shuffled String = " + cards); 
    } 

    static String shuffle(String cards){ 
     if (cards.length()<=1) 
      return cards; 

     int split=cards.length()/2; 

     String temp1=shuffle(cards.substring(0,split)); 
     String temp2=shuffle(cards.substring(split)); 

     if (Math.random() > 0.5) 
      return temp1 + temp2; 
     else 
      return temp2 + temp1; 
    } 
} 

回答

0

  • 使用Collections.shuffle()结合List.subList(),以便在第一和最后一个字母不移动。
  • 转换,并从基本数组,这样Collections.shuffle()可以用来

代码

private static String shuffle(String sentence) { 
    String[] words = sentence.split("\\s+"); 
    StringBuilder builder = new StringBuilder(); 
    for (String word : words) { 
     List<Character> letters = new ArrayList<Character>(); 
     for (char letter : word.toCharArray()) { 
      letters.add(letter); 
     } 
     if (letters.size() > 2) { 
      Collections.shuffle(letters.subList(1, letters.size() - 1)); 
     } 
     for (char letter : letters) { 
      builder.append(letter); 
     } 
     builder.append(" "); 
    } 
    return builder.toString(); 
} 
+0

也许使用Arrays.asList(word.toCharArray())比使用for循环好。你怎么看? – a11n 2014-12-02 16:47:56

+0

Arrays.asList(word.toCharArray())生成一个列表,其中一个元素是数组。 Arrays.asList()仅适用于像Character这样的包装类型,而不是char。 – Adam 2014-12-02 16:51:52

1

inputString.split(" ")将在空格上分割并返回一个字符串数组。创建一个新数组,遍历第一个拆分数组,并将每个字符串洗牌并将混洗后的字符串添加到新数组中。

String cards="Hello my Name is Jon, nice to meet you"; 
System.out.println("Input String = " + cards); 
String[] splt = cards.split(" "); 
String[] shuffled = new String[splt.length]; 
for (int iter = 0; iter < splt.length; iter ++){ 
    shuffled[iter] = shuffle(splt[iter]); 
} 
// Now join the array 

编辑更好的使用StringBuilder

String cards="Hello my Name is Jon, nice to meet you"; 
System.out.println("Input String = " + cards); 
String[] splt = cards.split(" "); 
StringBuilder sb = new StringBuilder(); 
for (int iter = 0; iter < shuffled.length; iter ++){ 
    sb.append(shuffle(splt[iter]) + " "); 
} 
String shuffled = sb.toString(); 
0

你应该分裂句成词,然后抢话:

String[] words = sentence.split(" "); 

for(String word : words) 
    word = shuffle(word); 

然后CONCAT字一起句子。

+1

修改字什么也不做,你必须Concat的到被对外宣称的String的for循环。 – kingdamian42 2014-12-02 16:29:48