如何在Java中将字符串按反斜杠分割

36
String fname="C:\textfiles\db\query\query.txt";

这是我需要分割的字符串。

我试过用这个方法

String [] items=fname.split("\");  

但是没有起作用。

String [] items=fname.split("\\"); also not working...

如何拆分这个字符串...


3
停止操作。在进行其他任何操作之前,先打印出 fname。你需要对字符串字面值中的反斜杠进行转义。 - Jonathon Reinhart
2
在引号中使用反斜杠“\”时,必须进行转义,因为它是一个特殊字符。在正则表达式中使用反斜杠“\”时,也必须进行转义,因为它是一个特殊字符。结果是“\\”。 无论如何,使用Path对象,您将获得对Windows和Posix路径样式的支持。 - odedsh
8个回答

64

首先,您不能像您在问题中发布的那样使用字符串。

String fname="C:\textfiles\db\query\query.txt";

这应该被替换为

String fname="C:\\textfiles\\db\\query\\query.txt";

因为反斜杠(“\”)也需要转义。

最后,您需要执行类似以下的操作来拆分它们:

 String fname="C:\\textfiles\\db\\query\\query.txt";
 String[] items= fname.split("\\\\");
 System.out.println(Arrays.toString(items));

希望这能帮到你。


23

'split'需要正则表达式。使用split的最佳方式是使用“Pattern.quote”。

String separator = "\\";
String value = "C:\\Main\\text.txt";
String[] arrValues = value.split(Pattern.quote(separator));

这是答案! - Mateusz Niedbal

15

它有效。

String fname="C:\\textfiles\\db\\query\\query.txt";
       String split[]  = fname.split("\\\\");
       System.out.println(" :: value " + split[0] );

2
org.apache.commons.lang3.StringUtils.split(fname, "\") 可以完成该任务。 - Junchen Liu

9
请使用以下代码...
fname.split(Pattern.quote(File.separator));

在Windows中工作正常,但在Linux中不起作用。需要使用“\”来适用于两个操作系统。 - Panneerselvam

5

首先,您需要将所有的“\”替换为“\\”,然后使用“\\”进行拆分。

String str="C:\Users\prajwal_nayak\Documents\queries.sql";
String separator = "\\";
String[] str_arr=str.replaceAll(Pattern.quote(separator), "\\\\").split("\\\\");

1
public static String[] splitPath (String path) {
    String backslash = ((char)92) + "";
    if (path.contains(backslash)) {
        ArrayList<String> parts = new ArrayList<>();
        int start = 0;
        int end = 0;
        for ( int c : path.toCharArray() ) {
            if (c == 92) {
                parts.add(path.substring(start, end));
                start = end + 1;
            }
            end++;
        }
        parts.add(path.substring(start));
        return parts.toArray( new String[parts.size()] );
    }
    return path.split("/");
}

1
一种有趣的解决问题的方法,但并不是在这里所要求的。 - John Hascall
我认为作者问的是他使用String.Split函数为什么不起作用,而不是关于分割算法实现的问题。 - Krzysztof Branicki
这绝对是上述问题(“如何拆分此字符串...”)的解决方案。那些声称您不能拥有带反斜杠的字符串的答案是错误的。我的示例甚至展示了如何创建带反斜杠的字符串。我在Android上遇到了这个问题,这是一个快速解决方案,可以解决我遇到的拆分问题。内置的string.split()函数将以奇怪的方式失败(内部正则表达式异常)。 - Philipp

0
**//single slash already used as space in java 
// suppose it would be Object Type obj="C:\textfiles\db\query\query.txt";**

public static void main(String[] args) {
String target="\\";
String replacement="\\\\";
String str=(String) obj;
str=str.replace(target, replacement);
String[] strarray=str.split(replacement);
String filename=strarray[8];
System.out.println("file Name: "+filename);
}

-1
请使用以下代码...
String str[]=fname.split("\\\\\\\");

\\\\\\\\\\\\\\\\\\\\\\ - Mateusz Niedbal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接