我使用Google排球从网站检索源代码。进行了一些循环以捕获代码中的值。我已成功捕获了我想要的数据,但显示错误:NumberFormatException:无效的浮动:" 2,459.00"
我的意图是在class = ListPrice>之后存储值。 样品: RM 2,899.00
我想要保存的源代码的示例值是" RM2,459.00"
以下是我写的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lazada_result);
lelongResult = (TextView) findViewById(R.id.lelong_result);
RequestQueue lelong = MyVolley.getRequestQueue(this);
StringRequest myLel = new StringRequest(
Method.GET,
"http://list.lelong.com.my/Auc/List/List.asp?DA=A&TheKeyword=iphone&x=0&y=0&CategoryID=&PriceLBound=&PriceUBound=",
RetrieveLelong(), createMyReqErrorListener());
lelong.add(myLel);
}
private Response.Listener<String> RetrieveLelong() {
return new Response.Listener<String>() {
@Override
public void onResponse(String response) {
ArrayList<Float> integers = new ArrayList<>();
String to = "class=ListPrice>";
String remainingText = response;
String showP = "";
while (remainingText.indexOf(to) >= 0) {
String tokenString = remainingText.substring(remainingText
.indexOf(to) + to.length());
String priceString = tokenString.substring(0,
tokenString.indexOf("<"));
float price = Float.parseFloat(priceString.replaceAll("[^\\d,]+", "").trim());
integers.add((price / 100));
remainingText = tokenString;
}
for (int i = 0; i < integers.size(); i++) {
String test1 = Float.toString(integers.get(i));
showP += test1 + "\n";
}
lelongResult.setText(showP);
}
};
}
问题如下:
我尝试了所有类型的replaceAll(),
1)replaceAll(&#34; [^ \ d,] +&#34;,&#34;&#34;)结果:2,89900
替换除数字和逗号之外的所有字符。
2)replaceAll(&#34; [^ \ d] +&#34;,&#34;&#34;)结果:无效的int&#34;&#34;
替换所有字符包括逗号和点,不能正常工作
3)replaceAll(&#34; [^ \ d。] +,&#34;&#34;)结果:无效的int&#34;&#34;
替换所有字符排除数字和点,不起作用
从上面的实验2和3编码中,我注意到如果删除了逗号,我就不能解析它,因为它收到的值是:&#34;&#34; .NumberFormatException:无效的浮点数: &#34;&#34;所示。
从实验1,NumberFormatException:Invalid Float&#34; 2,45900&#34;被展示了。
问题是替换逗号,代码无效但存在逗号时,该值无法存入字符串
答案 0 :(得分:0)
使用`replaceAll(Pattern.quote(&#34;,&#34;),&#34;&#34;);
编辑
如果您只想要数字,请使用此
String s1 = s.replaceAll(&#34; \ D +&#34;,&#34;&#34;);
答案 1 :(得分:0)
试试这个:
float price = Float.parseFloat(priceString.replaceAll("RM", "").trim());
答案 2 :(得分:0)
尝试通过指定区域设置来解析数字。
NumberFormat format = NumberFormat.getInstance(Locale.KOREAN);
Number number = format.parse(priceString.replaceAll("RM", ""));
double d = number.doubleValue();
我只是猜测地区,不知道你应该使用什么,取决于国家
答案 3 :(得分:0)
问题在于你的代码:
priceString.replaceAll(Pattern.quote(","), "");
float price = Float.parseFloat(priceString.replaceAll("\\D+\\s+", "").trim());
你正在取代昏迷,但没有存储价值! 你必须这样做:
priceString = priceString.replaceAll(",", "");
float price = Float.parseFloat(priceString.replaceAll("\\D+\\s+", "").trim());
我不确定模式&#34; \ D + \ s&#34;因为如果你移除了昏迷,你不需要更换任何其他东西(除了#34; RM&#34;我认为你已经删除了)
更新:设置语言环境并解析数字:
NumberFormat format = NumberFormat.getInstance(Locale.KOREAN);
Number number = format.parse(priceString.replaceAll("RM", ""));
double d = number.doubleValue();
答案 4 :(得分:0)
您需要逐个执行此操作
priceString=priceString.replaceAll("\\D", "");
priceString=priceString.replaceAll("\\s", "");
现在
priceString=priceString.trim();
float price = Float.parseFloat(priceString);