0

次のコードを変更しようとしています。

 String[] sarr = (new String("a\\b\\c\\d.jar")).split("[(/)|(\\)]");
 System.out.println(sarr[sarr.length-1]);

そのため、新しい文字列は、任意のシステム上のjarファイルの任意のパスになります。perl regexを使用すると簡単に実行できますが、Javaregexを使用すると目的の結果が得られません。どうすればそれを達成できますか?d.jarを取得する必要があります。

私は多くの異なる投稿を見ましたが、それらはすべて具体的であり、一般的ではないか、私が必要としているものが好きではありませんでした。

ありがとう。

4

2 に答える 2

1

正規表現やその他の文字列解析メカニズムを使用する代わりに、java.io.File. ファイルの名前を取得するために、多くのメソッドが用意されていますFile.getName()

String file_name = new File("a\\b\\c\\d.jar").getName();
System.out.println(file_name);

出力:

d.jar

于 2013-03-22T10:35:30.057 に答える
1

Java 文字列リテラルは、単一の 、、または文字と一致する文字クラスである"[(/)|(\\)]"正規表現 を表します。代わりに、Java 文字列リテラルを意味する正規表現 (1 つのスラッシュまたはバックスラッシュに一致するもの)が必要になるでしょう。[(/)|(\)](/|)[/\\]"[/\\\\]"

str.split("[/\\\\]");

または、その時点で実行しているシステムにネイティブなパスを常に処理することがわかっている場合 (つまりC:\Users\something、Windows で実行しているときと Linux/Mac/などで実行しているとき) は、次のクラス/home/userを使用できます。java.io.File

File f = new File(fullPath);
String name = f.getName();

getName()姓コンポーネントのみを返します。オブジェクトgetPath()に格納されているフル パス文字列File(相対パスの場合もあります)getAbsolutePath()を返すものと、絶対パスを返すもの (getPath()これが既に絶対パスであるかgetPath()、現在の作業ディレクトリがプレフィックスとして付けられている場合と同じ) もあります。相対的な場合)。

しかし、Unix ライクなシステムで Windows のパスを処理している場合、またはその逆の場合は、独自の文字列操作に固執する必要があります。

于 2013-03-22T10:22:15.513 に答える