2010-12-04 1 views
0

私はJavaでフォーマットしたいStringを持っています。ここに私のコードは次のとおりです。必要な空白を含むように文字列をフォーマットするにはどうすればよいですか?


import java.util.*; 
public class Test{ 

public static void main(String[] args){ 
    String a = "John  College of NY  NY 10286"; 
    a = removeSpaces(a); 
    System.out.println(a); 
} 

public static String removeSpaces(String s) { 
    StringTokenizer st = new StringTokenizer(s," ",false); 
    String t = ""; 
    while(st.hasMoreElements()){ 
    t = t + ";" + st.nextElement(); 
    } 
    return t; 
} 



私は私のコードを実行すると、私はこれを取り戻す:(前のセミコロンを気にしない)


;John;College;of;NY;NY;10286 



出力テキストはセミコロンで区切る必要がありますそのような三つの部分で、その最後の2に1つのまたは2の空白を保存する必要があります。


;John;College of NY;NY 10286; 


私は「大学」の間の空白を維持する方法がわかりません「and」「NY」の「&」の「」を含む。または、 "NY"と "10286"の間の2つの空白。行をどのようにフォーマットできますか?

+2

どのようなスペースとどのスペースが分かれているのか、どのように分かりますか? –

+1

私はタスクがうまく定義されていないと思う:) –

答えて

0
public static String removeSpaces(String s) { 
    StringTokenizer st = new StringTokenizer(s," ",false); 
    String t = ""; 

    int i=0; // counter variable 

    while(st.hasMoreElements()){ 

     switch(i) 
     { 
      case 2: 
      case 3: 
       t = t + " "; 
       break; 
      case 5: 
       t = t + " "; 
       break; 
      default: 
       t = t + ";"; 
       break; 
     } 

     t = t + st.nextElement(); 
     ++i; 
    } 

    t = t + ";"; // put the last semi-colon 

    return t; 
} 

あなたはあなたが欲しいものを達成するために、スイッチケースの文を使用することができ、第五の単語の後に2番目と3番目の単語と2つの空白文字の後に1つのブランク文字を入れたい考えます。

0

このような文字列を使用すると、部分文字列を区切るための明示的なルールが必要であるため、本当に良い方法はありません。区切り記号は空白、2つの空白、任意の数です...?

String a = "John  'College of NY'  'NY 10286'"; 

次にあなたが引用符で文字列内のスペースを保つことができる:

さて、あなたはこのような何かを持っていた場合は、より簡単に行うことができます。 これは宿題の要件内ですか?もしそうなら

、この回答を参照してください。Regex for splitting a string using space when not surrounded by single or double quotes

0

私が最初に(長さ)の右部分にある項目を区切るう

try { 
    Pattern regex = Pattern.compile("(.{11})(.{19})(.{4})(.+)", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); 
    Matcher regexMatcher = regex.matcher(subjectString); 
    while (regexMatcher.find()) { 
     // matched text: regexMatcher.group() 
     // match start: regexMatcher.start() 
     // match end: regexMatcher.end() 
    } 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 

を、その後、私は

周りの空白をトリムう
try { 
    String resultString = subjectString.replaceAll("(?i)\\A\\s*(.*?)\\s*\\Z", "$1"); 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} catch (IllegalArgumentException ex) { 
    // Syntax error in the replacement text (unescaped $ signs?) 
} catch (IndexOutOfBoundsException ex) { 
    // Non-existent backreference used the replacement text 
} 
+0

私はJavaプログラマーよりも多くのregexfreakを見ることができます(私はそれらのキャッチがすべて必要ではないと思います) – Spidfire

1

あなたのフィールドがどのように区切られるのかはあなたの質問からは不明です。それは(私はあなたが「それが1つのまたは2の空白を維持すべきである」と言うときから推測していた)、「3つの以上のスペース」だなら、あなたは正規表現でString.splitを使用することができます。

StringBuilder sb = new StringBuilder(); 
for (String s : "John  College of NY  NY 10286".split("\\s{3,}")) { 
    sb.append(';'); 
    sb.append(s); 
} 
return sb.toString(); 

これが返されます。

";John;College of NY;NY 10286" 
+0

あなたのregexを再利用しています。 – Kennet

+0

文字列a = "John College of NY NY 10286"; \t \t System.out.println(a.replaceAll( "\\ s {3、}"、 ";")); – Kennet

関連する問題