【问题标题】:The split() method in Java does not work on a dot (.) [duplicate]Java 中的 split() 方法不适用于点 (.) [重复]
【发布时间】:2011-12-17 15:54:44
【问题描述】:

我准备了一个简单的代码 sn-p 以便将错误部分与我的 Web 应用程序分开。

public class Main {

    public static void main(String[] args) throws IOException {
        System.out.print("\nEnter a string:->");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp = br.readLine();

        String words[] = temp.split(".");

        for (int i = 0; i < words.length; i++) {
            System.out.println(words[i] + "\n");
        }
    }
}

我在构建 Web 应用程序 JSF 时对其进行了测试。我只想知道为什么上面的代码temp.split(".") 不起作用。声明,

System.out.println(words[i]+"\n"); 

在控制台上不显示任何内容意味着它没有通过循环。当我将 temp.split() 方法的参数更改为其他字符时,它像往常一样工作得很好。可能是什么问题?

【问题讨论】:

  • 逃脱它。拆分适用于正则表达式
  • 哎呀,它默认是Java中的正则表达式?

标签: java string split


【解决方案1】:

documentation on split() 说:

围绕给定 regular expression 的匹配项拆分此字符串。

(强调我的。)

点是正则表达式语法中的特殊字符。如果您希望拆分为文字字符串模式,请在 split() 的参数上使用 Pattern.quote()

String[] words = temp.split(Pattern.quote("."));

【讨论】:

  • 这就是它!。而且 Pattern.quote(..) 使您的代码更具可读性。
【解决方案2】:

试试:

String words[]=temp.split("\\.");

方法是:

String[] split(String regex) 

“。”是正则表达式中的保留字符

【讨论】:

    【解决方案3】:

    java.lang.String.split 拆分正则表达式,而正则表达式中的. 表示“任何字符”。

    试试temp.split("\\.")

    【讨论】:

      【解决方案4】:

      它工作正常。你读过the documentation吗?字符串被转换为正则表达式。

      .是匹配所有输入字符的特殊字符。

      与任何正则表达式特殊字符一样,您可以使用\ 进行转义。 Java 字符串转义需要额外的\

      【讨论】:

        【解决方案5】:

        \\. 是简单的答案。下面是简单的代码供您参考。

        while (line != null) {
            //             
            String[] words = line.split("\\.");
            wr = "";
            mean = "";
            if (words.length > 2) {
                wr = words[0] + words[1];
                mean = words[2];
        
            } else {
                wr = words[0];
                mean = words[1];
            }
        }
        

        【讨论】:

          【解决方案6】:
              private String temp = "mahesh.hiren.darshan";
          
              String s_temp[] = temp.split("[.]");
          
            Log.e("1", ""+s_temp[0]);
          

          【讨论】:

            【解决方案7】:

            该方法采用正则表达式,而不是字符串,点在正则表达式中具有特殊含义。像这样split("\\.") 逃脱它。你需要一个双反斜杠,第二个转义第一个。

            【讨论】:

              猜你喜欢
              • 2015-05-27
              • 2019-12-18
              • 2014-11-26
              • 1970-01-01
              • 2014-09-06
              • 2021-02-27
              • 1970-01-01
              • 2013-03-26
              • 1970-01-01
              相关资源
              最近更新 更多