【问题标题】:Java Netbeans: Splitting a string using regular expressionsJava Netbeans:使用正则表达式拆分字符串
【发布时间】:2016-03-12 00:03:49
【问题描述】:

先生们,

我在 Java Netbeans 中工作。我正在尝试使用正则表达式拆分字符串(成字符串数组)。本质上,如果用户输入:

你好世界你好吗谷歌!

到 jTextArea 中,我希望将上面的字符串输入到一个名为 arrayOfStringsToProcess 的数组中以进行进一步处理。在序列的末尾,arrayOfStringsToProcess 的值应该是:

{"Hello World", "5" , "How are you", "yahoo", "google!"} 

我对里面是否有换行符无所谓。

当我尝试(在 netbeans 中)时:

String inputFromTextField = "";
String regularExpressionToSplit = "<>";
String[] arrayOfStringsToProcess;
inputFromTextArea = jTextArea23.getText();
arrayOfStringsToProcess = inputFromTextArea.split(regularExpressionToSplit);

代码编译并执行,但从jTextArea23 获取的整个字符串被加载到arrayOfStringsToProcess 的第0 个元素中,就好像从未发生过拆分一样。

据我所知,我上面的代码在 netbeans 之外做得很好,但 netbeans 根本不想将字符串与正则表达式分开。

最后,当我将“正则表达式”缩减为单个分隔符时,例如"&lt;",netbeans 会以这种方式拆分字符串:

{"Hello World", "5> How are you", "yahoo> google!"}

显然,这段代码编译并执行,但没有产生我想要的输出。

有没有一种方法可以在 Java netbeans 中做到这一点,而无需求助于废话,例如计算字符串中 &lt;&gt; 的数量,然后一次拆分一个字符串?我无法提前知道用户将要在 jTextArea23 中输入多少个这些字符。

我确信这个确切的问题已经在某个地方被问过,答案就在那里。我只是真的不知道在我的搜索中使用什么关键字。任何帮助将不胜感激,

布伦特。

【问题讨论】:

    标签: java regex string netbeans split


    【解决方案1】:

    您需要使用的模式需要说:我想在&gt;&lt; 处拆分。这以带有| 字符的regular expression 表示。所以你可以使用模式&lt;|&gt;。请注意,如果您还想围绕空格进行拆分,可以添加 \\s* 以匹配零个或多个空格。

    public static void main(String[] args) {
        String str = "Hello World <5> How are you < yahoo > google!";
        String[] tokens = str.split("\\s*<\\s*|\\s*>\\s*");
        System.out.println(Arrays.toString(tokens)); // prints "[Hello World, 5, How are you, yahoo, google!]"
    }
    

    【讨论】:

    • \\s*&lt;\\s*|\\s*&gt;\\s* 可以简化为 \\s*(&lt;|&gt;)\\s*\\s*[&lt;&gt;]\\s*(我不是说应该,但 IMO 值得一提)
    • @Pshemo 哈是的!它确实添加了一个捕获组(您可以忽略它)。
    【解决方案2】:

    您当前的正则表达式&lt;&gt; 正好代表字符串"&lt;&gt;"。如果您想拆分&lt;&gt;,则:

    • 您正在寻找由| 表示的OR 运算符

      split("<|>")
      
    • 你也可以使用character class

      split("[<>]")
      

    【讨论】:

    • 宾果游戏!谢谢大家。完全按照我的需要工作。我想我被 python 宠坏了,默认情况下它不需要任何管道或其他分隔符。
    • @the_photon 在这种情况下,请随时接受已发布的答案之一作为解决方案。由于两个答案相似并且可能正确,您可以选择一个您认为对您最有帮助(或者您更喜欢它)的答案。有关接受答案的更多信息:meta.stackexchange.com/a/5235/186652
    猜你喜欢
    • 2011-07-18
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多