任务描述
本关任务:根据要求实现字符串的拆分,并将得到的子串进行数值化转换,转换中利用异常机制进行处理,剔除非数值型的子串,对剩余数值子串求和并输出。
相关知识
为了完成本关任务,你需要掌握:如何将字符串进行分割。
String.split()拆分字符串
lang包String类的split()方法
public String[] split(String regex) regex正则表达式
public String[] split(String regex,int limit)
//limit参数控制应用的次数,影响所得数组的长度
拆分示例:
public class SplitDemo {
public static void main(String[] args) {
String Str="Harry James Potter";
String[] StrArray=Str.split("\\s");//"\\s"表示空格
//也可以来" "来进行拆分 String[] StrArray=Str.split(" ");
for(String str:StrArray){
System.out.println(str);
}
}
运行结果
Harry
James
Potter
如何用StringTokenizer类拆分字符串
引入util包下的StringTokenizer类
拆分原理
StringTokenizer拆分字符串的原理是通过生成StringTokenizer对象,然后运用对象的属性来处理字符串拆分的。
public StringTokenizer(String str,String delim,boolean returnDelims)
public StringTokenizer(String str,String delim)
public StringTokenizer(String str)
//参数str:表示要解析的字符串,delim:分隔符 returnDelims:是否将分隔符作为标记返回
拆分示例:
import java.util.StringTokenizer;
public class StringTokenDemo {
public static void main(String[] args) {
String Str="Harry James Potter";
StringTokenizer strToken=new StringTokenizer(Str," ");
String s;
//当有拆分的子字符串时,输出这个字符串
while(strToken.hasMoreTokens()){
s=strToken.nextToken());
System.out.println(s);
}
}
}
运行结果
Harry
James
Potter
本关编程要求
1、将第一个串利用String类的split()方法以“.”进行拆分,拆分后得到各String子串,输出。
2、第二个串:利用StringTokenizer类的方法实现拆分。以空格" "进行拆分。拆分后获得多个子串。
3、利用Double类的转换函数将其中的数值型子串转成double数值。如字符串“123”转为double型123.0
4、对转换过程中发生的异常进行处理,剔除非数值型的子串。
5、剩余的全部是转换后得到的数,求其和并输出。
请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:
用String.split()方法将字符串如“aaa.bbb.ccc”以“.”进行拆分
用StringTokenizer类将字符串如“1.2 3.1 ee 1”以空格进行拆分,并将此字符串中的非数值子串,如"e","mm"等去掉后返回,返回的每一个子串均为转换后的Double型变量。
计算并输出转换后的字串和。
转换函数用Double类的parseDouble(String str);
如:
double x;
x=Double.parseDouble(s);
其中,s是一个数字字符串,如"3.14"
如一组测试输入(第一个串,用“.”隔开。输入第二个串–数字字符串,用空格隔开。)
12.32
1.2 3.1 ee 1
测试输出:
12
32
1.2
3.1
1.0
sum=5.3000
第二组测试输入:
2000.9.1
1.5 .2 w q r t 3.1415926
测试输出:
2000
9
1
1.5
0.2
3.1415926
sum=4.8416
输入:
aaa.bbb.ccc
1 2 a 3 4
输出:
aaa
bbb
ccc
1.0
2.0
3.0
4.0
sum=10.0000
提示:
“|”、“.”、“*”、“+”、“\”等不是有效的模式匹配规则表达式,是转义字符,使用split()方法时必须得加"\"才行。
开始你的任务吧,祝你成功!
答案程序
package step1;
import java.util.List;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class SplitDemo{
//使用String.split()分割
public static List<String> splitPartition(String str){
ArrayList<String> list= new ArrayList<String>();
//Your code here
for (String s:str.split("\\.")) {
list.add(s);
}
return list;
}
//使用StringTokenizer类进行分割
public static List<Double> tokenPartition(String str){
ArrayList<Double> listTemp=new ArrayList<Double>();
//Your code here
StringTokenizer strToken = new StringTokenizer(str, " ");
String s;
double d, sum=0;
while (strToken.hasMoreTokens()){
s = strToken.nextToken();
try {
d = Double.parseDouble(s);
listTemp.add(d);
sum += d;
}
catch (NumberFormatException e){ }
}
return listTemp;
}
}