写一个程序,解析如下格式的字符串,并将解析的数字序列打印出来。
字符串格式举例: -1~2, 3~3, 5~10, 7~15x3
~ 代表数字的范围, -1~2 代表从-1开始到2之间的所有数字。 3~3 代表从3开始到3的所有数字,也就是3
7~15x3代表从7开始,最大为15,每隔3个数字取一个数字,所以7~15x3代表 7 10 13 三个数字。
所以上面的举例字符串代表 -1 0 1 2 3 5 6 7 8 9 10 7 10 13 这样的数字序列
字符串格式举例: -1~2, 3~3, 5~10, 7~15x3
~ 代表数字的范围, -1~2 代表从-1开始到2之间的所有数字。 3~3 代表从3开始到3的所有数字,也就是3
7~15x3代表从7开始,最大为15,每隔3个数字取一个数字,所以7~15x3代表 7 10 13 三个数字。
所以上面的举例字符串代表 -1 0 1 2 3 5 6 7 8 9 10 7 10 13 这样的数字序列
解决方案 »
- SSH的问题。
- 关于图像识别的问题
- 创建一个Hibernate出现的问题
- Hibernate的使用疑问,急急急啊
- Spring+Hibernate+Struts, Spring管理下的Bean,为啥被构造了四次?!!!!!
- eclipse中开发hibernate时抛出的异常
- struts中一个页面如何显示多个FormBean?
- 请教一个CMP的问题!
- 求助,SSH,C3P0数据库连接一直涨。
- 大神看看ssh中上sql语句哪里有错 nested exception is org.hibernate.hql.ast.QuerySyntaxExceptio
- MyEclipse 如何连接SqlServer2008?
- 语言识别器
思路:
1.split分割成数组。
2.循环
3.判断同时存在~和X
1.截取~左边的和右边的
2.截取X右边的,
3.计算出并保存
4.否则
1.截取~左边的和右边的
2.计算出并保存
5.打印
import java.util.regex.Pattern;/**
* 解析如下格式的字符串,并将解析的数字序列打印出来。
*
* @author Jongly
*
*/public class Test { /**
* @param args
*/
public static void main(String[] args) {
output("-1~2");
output("3~3");
output("5~10");
output("7~15x3");
} private static void output(String expression) {
String regex = "^-{0,1}\\d+~\\d+(x\\d+){0,1}$";
Pattern pattern = Pattern.compile(regex);
if (pattern.matcher(expression).find()) {
String[] str = expression.split("~|x"); //1
int max = Integer.parseInt(str[1]), min = Integer.parseInt(str[0]);
if (str.length == 3) {
System.out.println(min); //2
for (int j = 0; j <= (max - min) / 3; j++)
System.out.println(min += 3); //3
}
else //4
for (int i = min; i <= max; i++)
System.out.println(i);
} else
System.err.println("Input Error...");
}
}注解:
(对上述代码中部分注释的说明,如果还有不懂的请私下交流 QQ850945386)
1.如果满足正则表达式regex,则按照字符“~或者x”截取该exception成String[]
2.如果截取的String[]有三个元素,则首先打印输出首元素
3.隔3输出一个数字
4.只有两个元素,直接输出
楼上的7~15x3 写死了
import java.util.regex.Pattern;public class Analy {
/**
* @param args
*/
public static void main(String[] args) {
output("-1~2");
output("3~3");
output("5~10");
output("7~15x4");
} private static void output(String expression) {
String regex = "^-{0,1}\\d+~\\d+(x\\d+){0,1}$";
Pattern pattern = Pattern.compile(regex);
if (pattern.matcher(expression).find()) {
String[] str = expression.split("~|x");
int max = Integer.parseInt(str[1]), min = Integer.parseInt(str[0]);
if (str.length == 3) {
System.out.println(min);
int n = Integer.parseInt(str[2]); for (int j = 0; j <= (max - min) / n; j++)
System.out.println(min += n);
} else {
for (int i = min; i <= max; i++)
System.out.println(i);
}
} else
System.err.println("Input Error...");
}}