有人可以帮我在Java中将具有数字和字符的字符串转换为整数吗?
例如,我想将一个字符串金额= $ 100.00转换为一个整数。
我尝试使用integer.parseInt();
,但出现错误。
String Checkamount = $1400.00; //Convert web element to string.
int intAmount = Integer.parseInt(Checkamount);
预期结果:1400.00
线程“主”中的异常java.lang.NumberFormatException:对于输入字符串:“ $ 1,400.00” 在java.base / java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
答案 0 :(得分:1)
首先,1400.00
不能转换为int
,因为它具有小数位。您需要使用变量类型double
或float
来存储此值。
在转换为数字之前,请使用Java的replace()
替换掉不需要的字符。例如。
amount = amount.replace('$', '').replace(',', '');
double doubleAmount = Double.parseDouble(amount);
有一种更干净的方法来使用适当的正则表达式进行替换,但这应该可行。
答案 1 :(得分:0)
import java.util.regex.Pattern;
import java.util.Locale;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.NumberFormat;
import java.text.DecimalFormat;
public class DollarToInt{
public static void main(String[] args) throws ParseException{
//Method 1 --> ERROR WHEN \n incl
String amount="$1,32423410.00";
amount=amount.replace("$", "").replace(",", "");
double toDouble= Double.parseDouble(amount);
//Method 2 --> IGNORES \n
String amount2 = "$1,2131000.00";
DollarToInt method2= new DollarToInt();
BigDecimal toBigDecimal=method2.parse(amount2, Locale.US);
//Method 3 -> WHEN \n incl REMOVES VALUES RIGHT OF \n
Double toDouble3= NumberFormat.getCurrencyInstance(Locale.US).parse("$1, 400.00").doubleValue();
System.out.println(toDouble); //M1
System.out.println(toBigDecimal); //M2
System.out.println(toDouble3); //M3
}
public BigDecimal parse(final String amount, final Locale locale) throws ParseException {
final NumberFormat format = NumberFormat.getNumberInstance(locale);
if (format instanceof DecimalFormat) {
((DecimalFormat) format).setParseBigDecimal(true);
}
return (BigDecimal) format.parse(amount.replaceAll("[^\\d.,]",""));
}
}
我尝试了两种解析美元格式的方法,我认为方法2更好,并且是更好的方法。 请参阅:Converting different countrys currency to double using java
答案 2 :(得分:0)
使用子字符串。
String value = amount.substring(1,amount.length());
“值”现在将仅存储不带美元符号的数字。
double doubleAmount = Double.parseDouble(value);
我认为这会有所帮助。
答案 3 :(得分:0)
此处1400.00的内容无法转换为int。 但是,如果您希望不带小数点,那么这里是完整的解决方案
String amount = "$1400.00";
amount = amount.replace('$', ' ');
int intAmount= (int)Double.parseDouble(amount);
答案 4 :(得分:0)
一种可能的解决方案是利用NumberFormat
-唯一的限制是确保您使用适当的Locale
例如...
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);
try {
Number number = formatter.parse("$1000.40");
System.out.println(number);
System.out.println(number.intValue());
System.out.println(number.doubleValue());
} catch (ParseException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
}
将打印
1000.4
1000
1000.4
您也可以输入$1,000.40
,它会为您提供相同的结果。
同样,需要注意的是,NumberFormatter
将期望输入与输出相同。例如,上面的NumberFormatter
将输出1000.6
的双精度值作为$1,000.60
答案 5 :(得分:0)
要使用货币字符串,可以将NumberFormat
与locale
一起使用。
public static void main(String[] args) {
Locale locale = new Locale("en", "US");
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);
try {
String input = "$123,456,56.2";
Number money = currencyFormat.parse(input);
BigDecimal moneyAmount = BigDecimal.valueOf(money.doubleValue());
//Do whatever you want with money amount here.
} catch (ParseException pe) {
pe.printStackTrace();
}
}