【问题标题】:Match a string containing a comma (eg 1,5)匹配包含逗号的字符串(例如 1,5)
【发布时间】:2012-12-11 13:28:33
【问题描述】:

我想检查我是否从文本字段中获取的字符串 有一个逗号,以便删除它并用点请求一个新值。

我尝试使用

  textTestAr.trim().matches("^[,]+$")     

但是什么都没有发生,而这

        ^[1-9,]+$      

可以解决问题,但也可以匹配像 1 这样的数字。

【问题讨论】:

  • matches(",") 有什么问题?
  • @djechlin 认为matches 需要匹配整个字符串

标签: java regex


【解决方案1】:

你不需要在这个问题上强制使用正则表达式。一个简单的textTestAr.indexOf(',') 就可以了。

【讨论】:

  • 我不同意。与indexOf 和朋友们混在一起,更好地掌握并坚持这一必要工具。
  • @user946850 真正的大师会以同样优雅的方式使用所有可用的乐器。如果这是 ruby​​ 或 perl,那么使用正则表达式处理一切都是惯用的,但在 Java 中,正则表达式不是一等公民。
  • 如果代码的下一个要求是检查它是否仅由数字和一个点组成,你会怎么做?或者,如果您还想检查其他字符?或者...将更改正则表达式的努力与替代方案进行比较:首先使用“简单”工具(如果找不到匹配项又会发生什么?-1?异常?让我们查找 API...)只是为了发现无论如何你都需要“那个”工具。
  • @user946850 如果下一个需求是解析递归结构,你会怎么做?
  • 我将我的正则表达式插入一个上下文无关的解析器生成器并从那里开始。你是做什么的?
【解决方案2】:

插入符号^ 匹配文本的开头。 [,]+ 匹配任意数量的逗号。您需要的是忽略您要查找的项目之前和之后的所有内容:

^.*[,].*$

点匹配除换行符以外的任何字符。 * 是重复(0 - 任何数字)。 $ 匹配文本的结尾。

注意这里不需要修剪字符串。

【讨论】:

  • 你解释了其他元素,这里的 $ 有什么用处。
【解决方案3】:

为什么不在这里使用String#contains 而不是正则表达式。

【讨论】:

    【解决方案4】:

    只要做 if(textTestAr.contains(",")) System.out.println("It does!");

    【讨论】:

      【解决方案5】:

      只要textTestAr.contains(",")

      【讨论】:

        【解决方案6】:

        第一个断言整个字符串仅由逗号组成。第二个断言字符串由数字(0 除外)和逗号组成,但不需要其中的一个。你可以使用这个:

        .*,.*
        

        请注意,使用matches 时不需要^...$(因为它们是隐式的)。但无论如何,一个简单的indexOf 解决方案如 Marko 或 yentup 会更好。

        【讨论】:

        • 简单而公平的解决方案
        【解决方案7】:

        我会用正则表达式直接回答这个问题,

        /,/
        

        // 中放入一个或一组字母、符号或数字,它会尝试专门匹配它。

        【讨论】:

          【解决方案8】:

          不需要正则表达式:

          textTestAr.trim().replace(',','.');
          

          【讨论】:

            【解决方案9】:
                public  boolean hasComma(String string) {
                if ( string.indexOf(",") > -1) {
                    return true;
                }
                return false;
            }
            

            【讨论】:

            • 等等,这不是javascript吗? O_O
            猜你喜欢
            • 1970-01-01
            • 2022-07-06
            • 2013-05-31
            • 1970-01-01
            • 2017-01-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多