【问题标题】:Check if String token contains string char and String number value检查字符串令牌是否包含字符串字符和字符串数字值
【发布时间】:2014-08-04 11:12:56
【问题描述】:

1)我需要检查字符串是否包含字符串字符,正确的方法是什么?

2) 有什么方法可以正确地将 String 转换为 number 然后比较这两个 number 吗? Like String = "House":1234 等于 "House":1234 但不等于 "house":123 特权:

String token ="123"; False
String token = "ā123"; or other characters True utc.

if(isChars(token)){
   Long value = toLong(token);
}

谢谢!

//编辑 公共 BigDecimal eval() {

    Stack<BigDecimal> stack = new Stack<BigDecimal>();

    for (String token : getRPN()) {
        if (operators.containsKey(token)) {
            BigDecimal v1 = stack.pop();
            BigDecimal v2 = stack.pop();
            stack.push(operators.get(token).eval(v2, v1));
        } else if (variables.containsKey(token)) {
            stack.push(variables.get(token).round(mc));
        } else if (functions.containsKey(token.toUpperCase())) {
            Function f = functions.get(token.toUpperCase());
            ArrayList<BigDecimal> p = new ArrayList<BigDecimal>(f.getNumParams());
            for (int i = 0; i < f.numParams; i++) {
                p.add(0, stack.pop());
            }
            BigDecimal fResult = f.eval(p);
            stack.push(fResult);
        } else if (isDate(token)) {
            Long date = null;
            try {
                date = SU.sdf.parse(token).getTime();
            } catch (ParseException e) {/* IGNORE! */
            }
            // mylog.pl("LONG DATE : "+new BigDecimal(date, mc));
            stack.push(new BigDecimal(date, mc));
        }//TODO HERE 
        else if (isChar(token)){
            Long cha = toLong(token);
            stack.push(new BigDecimal(cha, mc));
            //TODO ENDS HERE
        }
        else {
            // mylog.pl("Token : "+ token);
            stack.push(new BigDecimal(token, mc));
        }
    }
    return stack.pop().stripTrailingZeros();
}

【问题讨论】:

  • equals() 方法有什么问题吗?顺便说一句,我根本没有得到你的问题。
  • 嗨!我需要检查令牌是否包含字母字符,然后将此令牌转换为 Long 或 BigDecimal 并进行比较。我当然知道 abouet equals() 但这种转换需要自定义函数表达式执行
  • Like dates got 方法:Long date = sdf.parse(token).getTime();与字符串类似吗?
  • 你能提供一些示例数据吗?您的问题不清楚 - 通常示例输入和输出是传达想法的最佳和最简单的方式。
  • 我正在接收字符串令牌,它只能是数字、日期或 varchar。我需要捕获这个 varchar 并将其转换为 Long。编辑了第一篇文章

标签: java string numbers compare character


【解决方案1】:

确定字符串是否包含任何字符的另一种方法是来自apache-commons-lang 库的好类StringUtils

它包含几种分析字符串内容的方法。看来,在你的情况下,你可以使用StringUtils.isAlphanumeric(CharSequence cs) 或否定StringUtils.isNumeric(CharSequence cs) 的结果。

你的问题的第二部分怎么样,所以我认为这里没有必要从字符串中提取数字。您可以使用标准的String.equals() 方法比较字符串"House":1234"house":123

【讨论】:

  • 你的想法是对的,但我不能比较两个字符串,我需要将字符串转换为数字,然后比较数字,因为自定义实用程序可以包含用户定义的函数调用和来自许多实体的值唯一一个值我可以比较的是 BigDecimal
【解决方案2】:
Long l;
try{
    l = Long.parseLong(token);
} catch(NumberFormatException e){
    //contains non-numeric character(s)
}

至于“将 varchar 转换为 Long”——这听起来相当不可能,我们没有普遍接受的方法,而您也没有提供。但是,如果我猜对了你想要的是字符串中的数字而忽略字符 - 你需要正则表达式。您想要的代码可能如下所示:

if (!StringUtils.isNumeric(token)){
   String stripped = token.replaceAll("\\D","");
   Long l = Long.parseLong(stripped);
}

【讨论】:

  • docs.oracle.com/javase/7/docs/api/java/lang/… 如果 token 不能被解释为 Long 则会抛出错误。
  • 那么这种方式不适合
  • 嗯...好吧,看来我不明白这个问题。你想在“a123”案例中发生什么?你想去掉非数字字符串,得到里面的数字吗?
猜你喜欢
  • 2011-11-09
  • 2013-05-18
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 2021-12-14
  • 2021-12-20
  • 2014-09-17
  • 2012-05-16
相关资源
最近更新 更多