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