我有以下字符串:
String str1 = "$123.00";
String str2 = "$(123.05)";
String str3 = "incorrectString";
我想检查并输出:
if(str1 is a valid currency){
System.out.println("Str1 Valid");
}else{
System.out.println("Str1 InValid");
}
if(str2 is a valid currency){
System.out.println("Str2 Valid");
}else{
System.out.println("Str2 InValid");
}
if(str3 is a valid currency){
System.out.println("Str3 Valid");
}else{
System.out.println("Str3 InValid");
}
用例:我正在使用 pdfbox 解析 pdf。给定一个搜索词“abc”,我想在搜索词之后读取下一个标记。为此,我在解析的 pdf 文本中搜索搜索词,然后读取该搜索词的下一个标记。
token 应该是有效的货币。但可能存在这样的情况:“abc”出现在页面中的两个不同位置,其中一个位置旁边有有效的货币 token ,而另一个位置则没有。
所以我想进行检查,如果我正在读取的 token 不是有效的货币 token ,请中断循环并继续在页面上搜索。
我是这样做的:
if (tokenRead.length() > 0) {
String temp = tokenRead.replace("$", "").replaceAll("\\(", "");
char checkFirstChar = temp.trim().charAt(0);
if (!(checkFirstChar >= '0' && checkFirstChar <= '9')) {
System.out.println("breaking");
break;
}
}
这可行,但我相信应该有一个使用 NumberFormat
的优雅解决方案。
因此问题来了!
感谢您的阅读!
最佳答案
NumberFormat 没有任何适合您的用例的开箱即用的东西。
我能想到的一个可能的解决方案是:
Currency currency = Currency.getInstance(currentLocale);
String symbol = currency.getSymbol();
if(string.startsWith(symbol) || string.endsWith(symbol)){
System.out.println("valid");
}else{
System.out.println("invalid");
}
但是您仍然需要检查字符串的其余部分是否可以解析为数字。
因此我建议查看 Apache Commons Currency Validator ,它可能适合您的需求:
@Test
public void test() {
BigDecimalValidator validator = CurrencyValidator.getInstance();
BigDecimal amount = validator.validate("$123.00", Locale.US);
assertNotNull(amount);
//remove the brackets since this is something unusual
String in = "$(123.00)".replaceAll("\\(", "").replace(')', ' ').trim();
amount = validator.validate(in, Locale.US);
assertNotNull(amount);
amount = validator.validate("invalid", Locale.US);
assertNull(amount);
}
关于java - 使用数字格式检查给定字符串是否是有效货币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22317684/