-6

我有一个由文件分隔符组成的字符串;例如“Bancs\Bancs_CP_P&MB.xml”。

我想根据“\”分隔字符串。

这是我正在尝试的:

public class Stringoperations {
    public static void main(String[] args) {
        try {
            String fileSeparator = System.getProperty("file.separator");
            String TestCaseName = "Bancs" + fileSeparator + "Bancs_CP_P&MB.xml";
            String[] tukde = TestCaseName.split("\\");
            System.out.println(tukde[0]);
            System.out.println(tukde[1]);
        } catch (Exception e) {
            e.getMessage();
        } finally {
            System.out.println("here");
        }
    }
}

但这不起作用。

4

6 回答 6

1

首先:添加一个e.printStackTrace();或类似于你的 catch 块的东西,这样你就会看到实际出了什么问题:

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
    at java.util.regex.Pattern.error(Pattern.java:1924)

Java 字符串文字中的反斜杠允许您将特殊字符放入字符串中:

String withTab = "a\tb";

将打印为"a b". 要在 Java 字符串中获得反斜杠,您需要对其进行转义:

String withBackslash = "a\\b";

这就是您在拆分调用中所做的:您传递了一个 java 字符串反斜杠。由于String.split()将传递的字符串评估为正则表达式(Java Doc for String.split()),因此反斜杠被视为正则表达式。反斜杠在正则表达式中有特殊含义,不能单独出现(Java Doc for Pattern)。如果你想要一个文字反斜杠,你需要再次转义反斜杠:

String[] tukde = TestCaseName.split("\\\\");
于 2013-04-26T06:05:40.213 回答
0

试试这个代码: -

public static void main(String[] args) {
        try
        {

        String fileSeparator = System.getProperty("file.separator");
        String TestCaseName = "Bancs"+fileSeparator+"Bancs_CP_P&MB.xml";
        String[] tukde = TestCaseName.split("\\\\");

        System.out.println(tukde[0]);
        System.out.println(tukde[1]);
        }catch(Exception e)
        {
            e.getMessage();
        }
        finally
        {
            System.out.println("here");
        }
    }

输出 :-

Bancs
Bancs_CP_P&MB.xml
here
于 2013-04-26T06:06:52.523 回答
0

您正在使用什么平台或操作系统。也许您的默认文件分隔符不是“\”。尝试这个 :

public class Stringoperations {
    public static void main(String[] args) {
        try {
            String fileSeparator = System.getProperty("file.separator");
            String TestCaseName = "Bancs" + fileSeparator + "Bancs_CP_P&MB.xml";
            String[] tukde = TestCaseName.split(fileSeparator); //This uses the default separator returned by System.getProperty
            System.out.println(tukde[0]);
            System.out.println(tukde[1]);
        } catch (Exception e) {
            e.getMessage();
        } finally {
            System.out.println("here");
        }
    }
}

编辑 :

同样正如 Makoto 指出的那样,如果您一心想要使用“\”进行拆分,则需要使用“\\”而不是“\”

于 2013-04-26T06:07:26.253 回答
0

首先,将该代码放入 IntelliJ IDEA 会导致它以非法的转义序列对我大惊小怪。您必须转义转义,因此您将使用\\\\有效的反斜杠转义语法。

其次,您应该拆分fileSeparator,而不是任意反斜杠。反斜杠实际上因系统而异(例如,我在 Linux Mint 上,我的分隔符都是正斜杠)。

String[] tukde = TestCaseName.split(fileSeparator);

作为进一步说明,这里没有可以抛出的异常(保存运行时),并且盲目地捕获所有异常不是一个好习惯。

于 2013-04-26T06:00:52.657 回答
0

尝试这个:

String pattern = Pattern.quote(System.getProperty("file.separator"));
String[] splittedFileName = fileName.split(pattern);
于 2013-04-26T06:10:30.463 回答
0
public class Stringoperations {
public static void main(String[] args) {
    try {
        String fileSeparator = System.getProperty("file.separator");
        String TestCaseName = "Bancs" + fileSeparator + "Bancs_CP_P&MB.xml";
        String[] tukde = TestCaseName.split("\\\\");
        System.out.println(tukde[0]);
        System.out.println(tukde[1]);
    } catch (Exception e) {
        e.getMessage();
    } finally {
        System.out.println("here");
    }
}
}

尝试这个

于 2013-04-26T06:12:38.447 回答