[英]Checking if a given String is a valid currency using number format
我有以下字符串:
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文本中搜索搜索词,然后读取该搜索词的下一个标记。
令牌应为有效货币。 但是,可能存在这样的情况:页面中的两个不同位置都存在“ 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
应该有一个优雅的解决方案。 因此,这个问题!
谢谢阅读!
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);
}
您可以尝试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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.