Как остановить java replaceAll () от удаления backsla sh? - PullRequest
1 голос
/ 14 февраля 2020

Я пишу простой код java, который просматривает строку, чтобы найти значение с именем REPLACEALL. Как только он находит эту строку, я заменяю ее именем пути в качестве значения (например: D:\test\path\something). Тем не менее, когда я запускаю код, он заменяет его нормально, но удаляет один \. Я не уверен, почему и настроил отладку, чтобы увидеть, где это происходит. Исходная строка передается в порядке, только когда строка проходит через replaceAll(), что вызывает эту проблему.

Java:

String path = "D:\test\path\something";
String s1="select * from Webserver WHERE data= REPLCAEME";  
String replaceString=s1.replaceAll("REPLACEME"," ' " + path + " ' ");  
System.out.println(replaceString);  

Ответы [ 2 ]

3 голосов
/ 14 февраля 2020

Backsla sh используется в качестве escape-символа в строках, что означает, что вы должны экранировать его как \\. В противном случае он обозначает специальные символы, например, \t обозначает пространство табуляции, поэтому в вашем примере \test фактически означает <tab>est.

0 голосов
/ 14 февраля 2020

Сделайте это следующим образом:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter the path: ");
        String path = in.nextLine();
        System.out.println("You entered: " + path);
        String s1 = "select * from Webserver WHERE data=REPLACEME";
        String replaceString = s1.replaceAll("REPLACEME", "'" + path.replaceAll("\\\\", "/").replaceAll("\\/", "\\\\\\\\") + "'");
        System.out.println(replaceString);
    }
}

Пример прогона:

Enter the path: D:\test\path\something
You entered: D:\test\path\something
select * from Webserver WHERE data='D:\test\path\something'

Не стесняйтесь комментировать в случае сомнений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...