1)我需要检查String是否包含String字符的核心方法是什么?
2)在某种程度上如何将String转换为数字然后比较两个数字?喜欢String =" House":1234等于" House":1234但是没有#34; house":123 Priview:
String token ="123"; False
String token = "ā123"; or other characters True utc.
if(isChars(token)){
Long value = toLong(token);
}
谢谢!
// EDIT public 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();
}
答案 0 :(得分:2)
确定字符串是否包含任何字符的另一种方法是来自apache-commons-lang库的不错的类StringUtils
。
它包含几种分析字符串内容的方法。在您的情况下,您似乎可以使用StringUtils.isAlphanumeric(CharSequence cs)
或否定StringUtils.isNumeric(CharSequence cs)
的结果。
你的问题的第二部分怎么样,所以我在这里看不到从字符串中提取数字的必要性。您可以使用标准"House":1234
方法比较字符串"house":123
和String.equals()
。
答案 1 :(得分:1)
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);
}