0

この文字列で著者とタイトルを使用するregexか、分離する方が良いですか:Stringtokenizer

William Faulkner - 'Light In August'

これは機能する最も簡単regexですか?

Pattern pattern = Pattern.compile("^\\s*([^-]+)-.*$");
Matcher matcher = pattern.matcher("William Faulkner - 'Light In August'");
String author = matcher.group(1).trim();
String bookTitle = matcher.group(2).trim();

それはやり過ぎですか、それとも でこれを行う簡単な方法はありStringtokenizerますか?

基本的に、私はregex上記のものをよく理解しておらず、助けを得ていないため、最も透過的で保守可能なソリューションを探しています。

4

3 に答える 3

2

入力をどの程度制御できますか? " - "著者とタイトルが常に(スペース、ダッシュ、およびスペース) で区切られることを保証できますか? 著者が含まれていないことを確実に知っています" - "か? 等々。

入力が非常に厳格な場合は、単純に を使用できますString#split()。これにより、何をしているのかが非常に明確になります。StringTokenizer ( source )を使用しないでください。

StringTokenizer は、新しいコードでの使用は推奨されていませんが、互換性のために保持されているレガシー クラスです。この機能が必要な場合は、代わりに String の split メソッドまたは java.util.regex パッケージを使用することをお勧めします。

Mark Byers' answerは、 の使用方法を示していますsplit()

ただし、入力のバリエーションが増えることを心配する必要がある場合 (たとえば、ダッシュの周囲の空白の量が可変になるか、まったく存在しないか)、正規表現を使用すると簡潔で簡潔になります。トレードオフは、コードの読みやすさと意図の明確さです。

于 2010-10-18T19:43:00.893 に答える
1

入力がどのように見えるかによって異なります。たとえば、正規表現は、ハイフンを含む著者名では失敗します。

おそらく次のようなもの

Pattern.compile("^\\s*(.*?)\\s+-\\s+'(.*)'\\s*$")

もう少し合うかもしれません。

于 2010-10-18T19:41:14.600 に答える
1

を使用してはString.splitどうですか?

String s = "William Faulkner - 'Light In August'";
String[] parts = s.split(" - ", 2);
String author = parts[0];
String title = parts[1];

イデオン

注意すべきことの 1 つは、一部の著者の名前や書籍のタイトルにハイフンが含まれているため、ハイフンだけで分割すると、通常は常に機能するとは限らないことです。

于 2010-10-18T19:42:41.477 に答える