簡體   English   中英

Java分割字符串?

[英]Java splitting strings?

每當出現“”時,我都會嘗試拆分一個字符串,例如語句test abc。 然后將每個單詞中的第一個字母從頭到尾移動。 我將字母移動到使用

String text = JOptionPane.showInputDialog(null,"Skriv in en normal text:");
char firstLetter = text.charAt(0);
normal = text.substring(1,text.length()+0) + firstLetter;

所以我的問題是,我將如何分割字符串,然后開始在分割字符串的每個部分中移動字母?

將拆分后的字符串存儲在一個數組中,然后遍歷該數組並替換每個字符串:

String[] pieces = originalString.split(" ");
for (int i = 0; i < pieces.length; i++)
    pieces[i] = pieces[i].subString(1) + pieces[i].charAt(0);

順便說一句,這只會讓您起步-無法正確處理存在多個空格,單字母單詞或任何其他特殊情況的情況(因為您沒有說想做的事情)。 您必須自己處理。

您不必為此split -tranform-join; replaceAll可以一步完成。

    String text = "Skriv in en normal text:";
    text = text.replaceAll("(\\s*)(\\w)(\\w+)", "$1$3$2");
    System.out.println(text);
    // prints "krivS ni ne ormaln extt:"

正則表達式基本上分為3組:

\1 : (\s*) : any optional preceding whitespace
\2 : (\w)  : the head portion of each "word"
\3 : (\w+) : any tail portion of each "word"

然后,隨着替換字符串變得清晰明了,您可以切換\\2\\3


因此,應該清楚的是,帶有捕獲組的replaceAll是解決此問題的最佳,最易讀的解決方案,但是該正則表達式的內容取決於問題的規范。 請注意,例如,上述正則表達式將text:轉換為extt:即,將冒號保留在原處)。

以下變體在空白\\s上分割,並對非空白字符\\S的任何序列的頭/尾重新排序。 這應該與您當前的split(" ") transform-join解決方案相同:

    String text = "bob: !@#$ +-";
    text = text.replaceAll("(\\s*)(\\S)(\\S+)", "$1$3$2");
    System.out.println(text);
    // prints "ob:b @#$! -+"

此變體對由單詞邊界\\b包圍的任何單詞字符\\w+序列進行切換。 如果這是您所需要的,那么這是最簡單,最易讀的解決方案。

    String text = "abc:def!ghi,jkl mno";
    text = text.replaceAll("\\b(\\w)(\\w+)\\b", "$2$1");
    System.out.println(text);
    // prints "bca:efd!hig,klj nom"

也可以看看

使用String.split將字符串分開。 然后,在每個部分上運行您的代碼。 您可以使用StringBuilder和循環將字符串再次放在一起。

如果性能是一個問題,請考慮使用StringTokenizer而不是split ,StringTokenizer快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM