黑马程序员技术交流社区

标题: 找不到错误。没有实现结果。另外,有没有知道\\t和\t的区别。 [打印本页]

作者: 曹亚辉    时间: 2016-9-8 23:29
标题: 找不到错误。没有实现结果。另外,有没有知道\\t和\t的区别。
//附加:有没有知道//t和/t的用处的区别,概念的区别。怎么区分不同的用处。
package com.hui3;

public class re {
        public static void main(String[] args) {
                String message= "老菜馆\r\n==菜名============价格=======\r\n大拉皮\t\t21.90\r\n鱼香肉丝\t\t22.80\r\n巫山烤鱼\t\t58.80 \r\n===========================";
                System.out.println(message);
                System.out.println("-----");
                String new_message = message.replace("=", "");
                           new_message = message.replace("\t\t", " ");
                           new_message = message.replace("\r\n", "");
                           System.out.println(new_message);
                           System.out.println("---");
                System.out.println(new_message);
                double num = 0;
                String[] now = new_message.split("\\t");
                for (int i = 0; i < now.length; i++) {
                        System.out.println(now[i]);
                        String regex = "[0-9]{1,8}";
                        if(now[i].matches(regex)){
                                num+=Double.parseDouble(now[i]);
                        }
                }
               
                System.out.println(num);
               
               
        }
}
作者: jiubaK    时间: 2016-9-9 00:26
不知道你说的没有实现功能,是没有得出总的价格还是怎么回事,我就假设是如此了。
[Java] 纯文本查看 复制代码
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Demo {
        public static void main(String[] args) {
                String message= "老菜馆\r\n==菜名============价格=======\r\n大拉皮\t\t21.90\r\n鱼香肉丝\t\t22.80\r\n巫山烤鱼\t\t58.80 \r\n===========================";
                System.out.println(message);
                System.out.println("-----");
                String new_message = message.replace("=", "");
                new_message = new_message.replace("\t\t", " ");
                new_message = new_message.replace("\r\n", "");
                System.out.println(new_message);

                System.out.println("---");
                double all = 0;
                Pattern p = Pattern.compile("\\d+\\.?\\d*");
                Matcher m = p.matcher(new_message);
                while( m.find() ) {
                        String res = m.group();
                        Double d = Double.valueOf(res);
                        all += d;
                }
                System.out.println(all);
        }
}

你没有得出总价,是因为你把\r\n去掉后,数字后面是有汉字的,通过\\t分割字符串得到数组,数字后面仍然有汉字,是不能和你的regex匹配的,而且,即使数组中某个元素只是价格字符串,你的regex也不能满足要求,因为中间是有小数点的。
另外,在要用到正则的时候,需要把单右斜杠\转义才行,因为他自身就是转义字符,在字符串中,要表示右斜杠本身,也是需要转义的,因为它是特殊字符。我们平时用的时候,它都是结合其他需要转义的字符一起使用的,比如\r,\t,\n等。
作者: 最美不是下雨天    时间: 2016-9-9 02:32
\t  本身为制表符,在作为普通字符串的时候\t就是制表符,但在作为正则表达式的时候,需要\来进行转义,才能达到制表符的效果.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2