トークンに分割されたコンマを分割するという一見単純な問題がありますString
。これにより、次の場合に出力に空のトークンが含まれるはずです。
- の最初の文字は
String
コンマです。 - の最後の文字は
String
コンマです。 - 2つの連続したコンマが発生します。
たとえば、String
:",abd,def,,ghi,"
の場合、出力は次のようになります{"", "abd", "def", "", "ghi", ""}
。
私はを使用してみString.split
ましたがScanner
、StringTokenizer
これにはそれぞれ異なる望ましくない出力が表示されます(以下の例)。誰かがこれに対するエレガントな解決策を提案できますか、できればJDKクラスを使用しますか?もちろん、自分で何かをコーディングすることもできますが、前述の3つのアプローチのいずれかで何かが欠けているように感じます。区切り文字は固定String
ですが、必ずしもコンマや1文字である必要はありません。
サンプルコード
import java.util.*;
public class Main12 {
public static void main(String[] args) {
String s = ",abd,def,,ghi,";
String[] tokens = s.split(",");
System.err.println("--- String.split Output ---");
System.err.println(String.format("%s -> %s", s, Arrays.asList(tokens)));
for (int i=0; i<tokens.length; ++i) {
System.err.println(String.format("tokens[%d] = %s", i, tokens[i]));
}
System.err.println("--- Scanner Output ---");
Scanner sc = new Scanner(s);
sc.useDelimiter(",");
while (sc.hasNext()) {
System.err.println(sc.next());
}
System.err.println("--- StringTokenizer Output ---");
StringTokenizer tok = new StringTokenizer(s, ",");
while (tok.hasMoreTokens()) {
System.err.println(tok.nextToken());
}
}
}
出力
$ java Main12
--- String.split Output ---
,abd,def,,ghi, -> [, abd, def, , ghi]
tokens[0] =
tokens[1] = abd
tokens[2] = def
tokens[3] =
tokens[4] = ghi
--- Scanner Output ---
abd
def
ghi
--- StringTokenizer Output ---
abd
def
ghi