2014-12-02 72 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