我有以下字符串:
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");
}
UseCase:我正在使用pdfbox解析pdf。鉴于searchterm说“abc”,我想在搜索词之后读取下一个标记。为此,我在解析的pdf文本中搜索搜索词,然后读取该搜索词的下一个标记。
令牌应为有效货币。但是可能存在这样的情况:在页面中的两个不同位置存在“abc”,其中一个在其旁边具有有效的货币标记而另一个没有。
所以我想检查一下,如果我正在阅读的令牌不是有效的货币令牌,请打破循环并继续搜索页面。
我按照以下方式做到了:
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
应该有一个优雅的解决方案。
因此问题!
感谢阅读!
答案 0 :(得分:3)
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);
}
答案 1 :(得分:0)
您可以尝试DecimalFormat
。它允许您使用;
分别处理正值和负值模式:
List<String> list = new ArrayList<>();
list.add("$123.00");
list.add("$(123.05)");
list.add("incorrectString");
NumberFormat nf = new DecimalFormat("¤#.00;¤(#.00)", new DecimalFormatSymbols(Locale.US));
try {
for(String str : list){
nf.parse(str);
}
} catch (ParseException e) {
System.out.println(e.getMessage());
}