【问题标题】:String operations:Split字符串操作:拆分
【发布时间】:2013-04-26 05:54:31
【问题描述】:

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

但这不起作用。

【问题讨论】:

  • 这有什么问题?
  • 用“\”分割字符串
  • 您可以使用StringTokenizer进行拆分。
  • 您是否遇到任何错误?还是遇到异常?
  • @Maximin StringTokenizer 已弃用。

标签: java string split


【解决方案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("\\\\");

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      试试这个代码:-

      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
      

      【讨论】:

        【解决方案4】:

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

        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 指出的那样,如果您一心想要使用“\”进行拆分,则需要使用“\\”而不是“\”

        【讨论】:

          【解决方案5】:

          试试这个:

          String pattern = Pattern.quote(System.getProperty("file.separator"));
          String[] splittedFileName = fileName.split(pattern);
          

          【讨论】:

            【解决方案6】:
            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");
                }
            }
            }
            

            试试这个

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多