2

この問題の解決策を教えてください。

Swing コンポーネントを使用して Java GUI を作成しようとしています。

インターフェイスは、特定のファイルへの Windows パスを受け入れ、送信ボタンを押した後にファイルに対して一連の機能をトリガーすることになっています。

現在、ユーザー入力を取得するコンポーネントを次のように作成しました。

JTextField introducedPath1 = new JTextField(50);

エクスプローラーからパスをコピーして貼り付けて取得したデフォルトの Windows パスを、受け入れられたファイル パスに変更しようとしました。

File file;
String makeCanonicalPath=introducedPath1.getText().toString();
            makeCanonicalPath=makeCanonicalPath.replaceAll("\\", "/");
            file = new File(makeCanonicalPath);

しかし、私はこのエラーを受け取り続けます:

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

\
 ^
at java.util.regex.Pattern.error(Unknown Source)
at java.util.regex.Pattern.compile(Unknown Source)
at java.util.regex.Pattern.<init>(Unknown Source)

これは、Windows のデフォルト パス (例: L:\practice\test) が「\」をエスケープ シーケンスとして解釈することが原因であると考えられます。

任意のヘルプや提案をいただければ幸いです

4

1 に答える 1

3

replaceAll では、正規表現に Java エスケープを使用する必要があるため、

makeCanonicalPath.replaceAll("\\\\", "/");

テキスト検索置換ではなく、正規表現であるためです。

テキストベースの検索置換が必要な場合は、たとえばapache commons string replaceを使用します。

また、replaceAll の代わりにreplace() - http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#replace(char , char) を使用することもできます。正規表現を使用せずにすべての出現を置き換えます。置き換える文字は1つしかないため、機能します。

于 2013-01-03T18:54:35.393 に答える