输入一串字符格式为“姓名:分数;。。。”Java程序报错 求解啊

程序如下:
import java.util.Scanner;
public class 姓名排序 {
public static void main(String args[])
{
Scanner reader = new Scanner(System.in);
String str1,temp;
double x,y;
System.out.println("请输入一行文本:");
str1 = reader.nextLine();
String str2 = str1;
String regex1 = "[\\s\\p{Punct}[\\d]+\\p{Punct}]+";
String regex2 = regex1;
String words[] = str1.split(regex1);
String digitwords[] = str2.split(regex2);
for(int i= 0;i < words.length;i++)
{
for(int j = 1;j < words.length;j++)
{
x = Double.parseDouble(digitwords[i]);
y = Double.parseDouble(digitwords[j]);
if(x > y)
{
temp = words[i];
words[i] = words[j];
words[j] = temp;
temp = digitwords[i];
digitwords[i] = digitwords[j];
digitwords[j] = temp;
}
}
}
System.out.println("请输出文本:");
for(int i= 0;i < words.length;i++)
{
System.out.println(" "+words[i]+" "+digitwords[i]);
}
}
}
请输入一行文本:
zhangsan:89;lisi:78;

报错如下:
Exception in thread "main" java.lang.NumberFormatException: For input string: "zhangsan"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at 姓名排序.main(姓名排序.java:20)
“ String regex1 = "[[\\p{Alpha}]+\\p{Punct}[\\d]+\\p{Punct}]+"; ”
我把这行改了了一下,
我的意思是输入一串字符,“姓名(英文的):分数;姓名(英文的):分数;姓名(英文的):分数;...”
按照分数高低,将姓名和分数进行排序

由于对正则表达式不熟悉,所以看不懂到底是什么意思,反正是你的字符串数组里面包含只有姓名,没有分数,姓名是无法转换成为数字的。所以,必然错误,你大概的意思是提取出数字吧,那就把正则表达式修改为提取数字即可。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-27
错误信息很明确啊,处理程序想将zhangsan转换成数字,当然报运行错误。
你现在的程序是对于输入的一串数字进行冒泡排序。
第2个回答  2013-04-27
就是人的输入不正确,要分行输入

输入一串字符格式为“姓名:分数;。。。”Java程序报错 求解啊
由于对正则表达式不熟悉,所以看不懂到底是什么意思,反正是你的字符串数组里面包含只有姓名,没有分数,姓名是无法转换成为数字的。所以,必然错误,你大概的意思是提取出数字吧,那就把正则表达式修改为提取数字即可。

网上查的java例题,敲出来显示一个错误,字符串文字未用双引号正确的引起...
1、如果我没有看错的话,你的第一个打印A后面的是双引号吧,改成单引号就ok,如下:System.out.println("this mark is grade \\'A\\'");2、还有,因为你里面的使用的是单引号,外面使用的是双引号,所以里面的单引号不用加转义字符,可以直接使用:System.out.println("this mark is grade 'A'...

java 通过txt检索学号查出姓名
你的程序主流程,开始一个无限循环,用户输入一个编号,你去Map里查找是否包含这个key,如果包含,代表存在这个学生的信息,打印出来,如果不存在,说明用户输入了一个不存在的编号,这个学生的信息不存在。然后用户是否继续,如果继续,那就continue继续这个循环,如果用户选择不继续,那就退出这个无限循环。程...

Java 基础编程题求解,不是很懂
\/\/实现输入一个字符窜数字集合数字以逗号分隔public static void testString(){System.out.println("请输入数据边界值:");\/\/获取输入数字Scanner sc = new Scanner(System.in);String s = sc.next();if(s != null && s.length() > 0){String [] sNum = s.split(",");for (int ...

java的map程序...Set<String> set = map.keySet(); \/\/\/1 <String> 何...
1 泛型,意思是set里必须是String类型 2 首先你要知道的是,map是什么,他是键值对,key value pair,key可以提高你访问value的速度,但是key通常没什么卵用,真正要用的value,map提供给你了一个方法keySet()来得到所有key的集合,因为key是唯一的,显然set最合适。3 java提供的方法你就看API就好了...

...AI_CS3的矢量素材的时候,AI_CS3就报错挂掉了,求解啊~~~
1、使用系统自带的sfc命令,修复受到损坏的系统文件恢复到正常状态。开始→运行→输入cmd,打开“命令提示符”窗口→输入字符串命令sfc\/scannow→回车→耐心等待命令程序对每个系统文件搜索扫描→一旦发现系统文件的版本不正确或者系统文件已经损坏→它就能自动弹出提示界面→要求插入Windows系统的安装光盘→从中...

Scanner input=new Scanner 在JAVA中是什么意思啊~~~!求解~~!
Scanner input= new Scanner() ;声明一个Scanner类的对象,并实例化 也可以写成 Scanner input; \/\/声明一个Scanner类的对象 , input 被初始化,并且 input = null;input = new Scanner() ;\/\/实例化该对象,,,用 new 分配内存空间给input ...

谁帮我写一个多元一次方程自动求解的程序啊 用JAVA写
x + 6y - 3z = 4 则转化系数为行列式数组 int[][] param = { {3, 2, 5, 22},{2, -3, 7, 17},{1, 6, -3, 4} };参考编码:public static void main(String[] args) throws Exception { int[][] param = { {3, 2, 5, 22},{2, -3, 7, 17},{1, ...

...JAVA程序?运行时提示另一个JAVA程序正运行,求解啊
我以前也用的E6,自己也刷过机,你这种情况是刷机包里面不支持JAVA双开,你可以换个刷机包从新刷下,因为不支持JAVA双开,所以你如果运行另外一个JAVA程序时就会出现JAVA程序正在运行的提示。

java的map程序...为什么要继承Comparable这个接口? ...有三个问题啊...
实现Comparable,这个类的对象就能比较大小了,换句话说可以排序。实现那个借口,就必须实现compareTo方法。这边为啥要加<UpdateStu> 这是泛型

相似回答
大家正在搜