System.getenv () возвращающий \ - PullRequest
0 голосов
/ 08 января 2012

ОК, поэтому я пытаюсь найти путь к месту на компьютере с помощью функции System.getenv, и он возвращает \ в пути, а не /, что мне нужно. я пытался с методом replaceAll, но он возвращает ошибку:

Exception in thread "main" 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)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)
    at Launcher.start(Launcher.java:75)
    at Launcher.Download(Launcher.java:55)
    at Launcher.<init>(Launcher.java:31)
    at Launcher.main(Launcher.java:17)

строка кода:

InputStream OS = Runtime.getRuntime().exec(new String[]{"java",System.getenv("APPDATA").replaceAll("\\", "/")+"/MS2-torsteinv/MS2-bin/no/torsteinv/MarsSettlement2/Client/Client.class"}).getErrorStream();

Ответы [ 3 ]

4 голосов
/ 08 января 2012

Вам необходимо удвоить обратную косую черту:

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

Каноническое регулярное выражение действительно \\, но в Java регулярные выражения находятся в строках, а в строках Java буквальный обратный слэш должен быть экранирован с помощью другогообратная косая черта.Следовательно, \\ становится "\\\\".

3 голосов
/ 08 января 2012

В регулярных выражениях Java вы должны экранировать обратную косую черту и снова в строку java. Всего получается четыре обратных слеша.

replaceAll("\\\\", "/")
2 голосов
/ 08 января 2012

возвращает \ в пути, а не / что мне нужно.

Платформа по умолчанию обязательно - это то, что вам нужно.

import java.io.File;

class FormPath {
    public static void main(String[] args) {
        String relPath = "/MS2-torsteinv/MS2-bin/no/" +
            "torsteinv/MarsSettlement2/Client/Client.class";
        String[] parts = relPath.split("/");
        File f = new File(System.getenv("APPDATA"));
        System.out.println(f + " exists: " + f.exists());

        for (String part : parts) {
            // use the File constructor that will insert the correct separator
            f = new File(f,part);
        }
        System.out.println(f + " exists: " + f.exists());
    }
}

выход

C:\Users\Andrew\AppData\Roaming exists: true
C:\Users\Andrew\AppData\Roaming\MS2-torsteinv\MS2-bin\no\torsteinv\MarsSettlement2\Client\Client.class exists: false
Press any key to continue . . .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...