.
で文字列を正しい方法で分割しようとしているかどうか疑問に思っていますか?私のコードは:
String[] fn = filename.split(".");
return fn[0];
文字列の最初の部分だけが必要なため、最初の項目を返します。 APIで.
が任意の文字を意味することに気づいたので、私は尋ねます。
split()
は正規表現を受け入れるため、.
をエスケープして正規表現のメタ文字と見なさないようにする必要があります。次に例を示します。
String[] fn = filename.split("\\.");
return fn[0];
Splitは正規表現を使用します。「。」は何かを意味する特殊文字です。実際に '。'と一致させる場合は、エスケープする必要があります。キャラクター:
String[] fn = filename.split("\\.");
(正規表現の '。'をエスケープする1つの '\'と、Java文字列)の最初のエスケープする1つの '\'
また、有効な名前であるsomething.blabla.txt
という名前のファイルがある場合、実際のファイル名を返さないため、fn [0]を返すことはお勧めしません。代わりに、次を使用する方が良いと思います:
int idx = filename.lastIndexOf('.');
return filename.subString(0, idx);
string#split(String)メソッドは正規表現を使用します。正規表現では、「。」文字は「任意の文字」を意味します。 「。」をエスケープすることにより、この動作を回避できます。
filename.split("\\.");
または、文字クラスで分割するようにsplitメソッドに指示します:
filename.split("[.]");
文字クラスは文字のコレクションです。あなたは書くことができます
filename.split("[-.;ld7]");
ファイル名は、「-」、「。」、「;」、「l」、「d」または「7」ごとに分割されます。文字クラス内では、「。」特殊文字(「メタ文字」)ではありません。
DOT(。)は特殊文字と見なされ、Stringのsplitメソッドは正規表現を想定しているため、このようにする必要があります-
String[] fn = filename.split("\\.");
return fn[0];
Javaでは、特殊文字は「\」でエスケープする必要がありますが、「\」はJavaでも特殊文字であるため、別の「\」で再度エスケープする必要があります!
String str="1.2.3";
String[] cats = str.split(Pattern.quote("."));
使用する方が効率的ではないでしょうか
filename.substring(0, filename.indexOf("."))
最初のドットまでしか必要ない場合は?
通常、手動でマスクを解除することはお勧めできません。このタスクには、Patternクラスにメソッドがあります。
Java.util.regex
static String quote(String s)
分割では、正規表現を引数として使用する必要があります...単に"."
から"\\."
注:ドットがエスケープされた後でも、このスニペットにはさらに注意が必要です!
Filenameが単なる文字列 "。"の場合、fnの長さは0のままになり、fn [0]は例外をスローします!
これは、パターンが少なくとも1回一致すると、splitは末尾の空文字列をすべて破棄(したがって、beforeドット!)配列から、返される空の配列を残します。