ReplaceAll不起作用

时间:2015-06-25 08:45:49

标签: android replaceall

我使用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;被展示了。

问题是替换逗号,代码无效但存在逗号时,该值无法存入字符串

5 个答案:

答案 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);