字符串操作:拆分



我有一个由文件分隔符组成的字符串;例如"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");
        }
    }
}

但这是行不通的。

首先:添加一个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 = "atb";

将打印为CCD_ 2。要在Java字符串中获得反斜杠,需要对其进行转义:

String withBackslash = "a\b";

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

String[] tukde = TestCaseName.split("\\");

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

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

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

需要进一步注意的是,这里没有可以抛出的异常(除了运行时(,盲目捕获所有异常不是一个好做法。

试试这个代码:-

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

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

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还指出,如果你想使用"\"进行拆分,你需要使用"\\"而不是"\">

试试这个:

String pattern = Pattern.quote(System.getProperty("file.separator"));
String[] splittedFileName = fileName.split(pattern);
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");
    }
}
}

试试这个

最新更新