A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//附加:有没有知道//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);
               
               
        }
}

2 个回复

倒序浏览
不知道你说的没有实现功能,是没有得出总的价格还是怎么回事,我就假设是如此了。
[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等。
回复 使用道具 举报
\t  本身为制表符,在作为普通字符串的时候\t就是制表符,但在作为正则表达式的时候,需要\来进行转义,才能达到制表符的效果.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马