大神们快来帮帮小弟我(一个关于从一串字符,取数字在进行相加)

I_am_a_Beginner 2015-07-09 06:42:36
题目如下;
实现以下功能: 从键盘输入一串字符,将其中的数值取出,并求出这些数值的和。
效果如下;
输入为;qq222w110w1w
输出为;333


请大神们进来教教我,我想了好久也不知道怎么去入手,方法越简单越好。最好讲一下你是怎么去思考的。。。。。。
...全文
221 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
I_am_a_Beginner 2015-07-11
  • 打赏
  • 举报
回复
引用 9 楼 abyss521 的回复:
[quote=引用 4 楼 I_am_a_Beginner 的回复:] [quote=引用 2 楼 oh_Maxy 的回复:]

    public static void main(String[] args) {
        String target = "qq222w110w1w";
        String regex = "(\\d+)";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(target);

        int sum = 0;

        while (m.find()) {
            sum += Integer.valueOf(m.group(1));
        }

        System.out.println(sum);
    }
对于的代码是正确,但是我又一些问题; 1、while这个循环的代码是什么意思?帮我解析一下! 2、当 "(\\d+)"的括号去掉时,编译时怎么会报错??而group(1)改为group(0)代码就变正确的,这是什么原因的??[/quote] 建议楼主看下正则表达式和java api中Pattern和Matcher类的说明[/quote] 我看了,就看了不是很明白才到这我啊!!!
靳以山 2015-07-10
  • 打赏
  • 举报
回复
引用 4 楼 I_am_a_Beginner 的回复:
[quote=引用 2 楼 oh_Maxy 的回复:]

    public static void main(String[] args) {
        String target = "qq222w110w1w";
        String regex = "(\\d+)";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(target);

        int sum = 0;

        while (m.find()) {
            sum += Integer.valueOf(m.group(1));
        }

        System.out.println(sum);
    }
对于的代码是正确,但是我又一些问题; 1、while这个循环的代码是什么意思?帮我解析一下! 2、当 "(\\d+)"的括号去掉时,编译时怎么会报错??而group(1)改为group(0)代码就变正确的,这是什么原因的??[/quote] 建议楼主看下正则表达式和java api中Pattern和Matcher类的说明
JPF1024 2015-07-10
  • 打赏
  • 举报
回复
正则表达式是最快的了。
tony4geek 2015-07-10
  • 打赏
  • 举报
回复
要么正则,要么一个个的读取判断。
三仙半 2015-07-10
  • 打赏
  • 举报
回复
不使用正则的解决方案,思路在代码中注释得很清楚了。

// 输入字符串
		 String input = "qq222w110w1w";
		//String input = "100w110w2";
		// 临时保存一组数字
		StringBuffer buff = null;
		// 总和
		int sum = 0;
		// 是否开始累积数字的标志
		boolean isAccumulate = false;
		// 依次处理每个字符
		for (int i = 0; i < input.length(); i++) {
			//取得一个字符
			char ch = input.charAt(i);
			if (!isAccumulate) {// 还没有进入数字累积状态
				if (ch >= 48 && ch <= 57) {// 遇到第一个数字字符
					// 初始化临时变量
					buff = new StringBuffer();
					// 将新的数字字符加入到变量尾部
					buff.append(ch);
					// 设置标志量:开始累积数字
					isAccumulate = true;
				} else {// 遇到非数字字符。这个分支可以不写
						// 什么也不做
						// nothing
				}
			} else {// 在数字累积状态下
				if (ch >= 48 && ch <= 57) {// 遇到数字字符
					// 将数字字符加入到变量尾部
					buff.append(ch);
				} else {// 遇到非数字字符
					// 将临时变量转成字符串,然后解析成整数
					// sum+=Integer.parseInt(new String(buff));
					String tmp = new String(buff);
					int num = Integer.parseInt(tmp);
					sum += num;
					// 设置标志量:退出数字累积状态
					isAccumulate = false;
				}
			}
		}
		//处理字符串以数字字符结尾的问题
		if(isAccumulate){
			String tmp = new String(buff);
			int num = Integer.parseInt(tmp);
			sum += num;
		}
		// 输出总和
		System.out.println(sum);
sg19911227 2015-07-09
  • 打赏
  • 举报
回复
public class Test { public static void main(String[] args) { System.out.println("请输入字符串!"); Scanner scanner=new Scanner(System.in); String str=scanner.next(); //用于截取字符串 String regex1="[a-z]"; //用于验证匹配,为0-9之间的一个或多个数字 String regex2="\\d*"; //截取字符串,获得字符数组 String[] arrs=str.split(regex1); int num=0; for(String arr:arrs ){ //从数组中寻找符合条件的元素 if(arr.matches(regex2)==true&&!arr.equals("")){ num+=Integer.parseInt(arr); } } System.out.println(num); } }
I_am_a_Beginner 2015-07-09
  • 打赏
  • 举报
回复
引用 2 楼 oh_Maxy 的回复:

    public static void main(String[] args) {
        String target = "qq222w110w1w";
        String regex = "(\\d+)";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(target);

        int sum = 0;

        while (m.find()) {
            sum += Integer.valueOf(m.group(1));
        }

        System.out.println(sum);
    }
对于的代码是正确,但是我又一些问题; 1、while这个循环的代码是什么意思?帮我解析一下! 2、当 "(\\d+)"的括号去掉时,编译时怎么会报错??而group(1)改为group(0)代码就变正确的,这是什么原因的??
alan19931103 2015-07-09
  • 打赏
  • 举报
回复
如果不会正则,就一个一个读咯
oh_Maxy 2015-07-09
  • 打赏
  • 举报
回复

    public static void main(String[] args) {
        String target = "qq222w110w1w";
        String regex = "(\\d+)";

        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(target);

        int sum = 0;

        while (m.find()) {
            sum += Integer.valueOf(m.group(1));
        }

        System.out.println(sum);
    }
飏飏一蝶 2015-07-09
  • 打赏
  • 举报
回复
正则表达式。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧