古いjavaの質問のレビュー
7-3Officeドキュメントのページ番号の印刷(20ポイント)Office
ソフトウェア(Word、Excel)では、ドキュメント全体の一部のみを印刷する必要があり、ユーザーは次のページ番号の範囲を選択する必要があります。印刷されます。現在入力されているページ番号範囲の形式は、コンマで区切って次のように定義されます。-連続したページ番号を示すために使用できます。例:1,3,5-9,20。印刷するページ番号が1、3、5、6、7、8、9、20であることを示します。
この質問では、印刷するページ番号の範囲として文字列の行を読み取る必要があります。次の点に注意する必要があります。
1.ページ番号の範囲は順不同で入力できます。例:5,3,7,9-10,1-2;
2.連続ページ番号の定義は、昇順で入力することはできません。例:1,9,5,20-15,10;
3。入力したページ番号の範囲を繰り返すことができます。例:1,9,15,5-10,12-20;
入力フォーマット:
最初の行:ページ番号の範囲を表すフォーマットされた文字列
出力形式:
印刷するページ番号をスペースで区切って昇順で出力します
入力サンプル:
1,3,5-9,20
サンプル出力:
1 3 5 6 7 8 9 20
入力サンプル:
12-20,1,15,9,5-10
サンプル出力:
1 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20
年:
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
String s=in.next();
String[] a=s.split(",");
judge jj=new judge();
Set<Integer> set=new HashSet<>();//要求没有重复的元素,使用集合处理
for(int i=0;i<a.length;i++) {
if(jj.isInt(a[i])) {
//如果是整数
set.add(Integer.parseInt(a[i]));//添加到集合中
}else {
//如果不是整数
String[] temp=a[i].split("-");
int num1=Integer.parseInt(temp[0]);
int num2=Integer.parseInt(temp[1]);
if(num1>num2) {
int tt=num1;
num1=num2;
num2=tt;
}
for(int ii=num1;ii<num2;ii++) {
set.add(ii);//添加到集合
}
}
}
int[] arr=new int[set.size()];
int len=0;
for(Integer i:set) {
arr[len++]=i.intValue();
}
Arrays.sort(arr);//排序,默认小到大
for(int ii=0;ii<arr.length;ii++) {
//输出
System.out.print(arr[ii]);
if(ii<arr.length-1)System.out.print(" ");
}
}
}
class judge{
public boolean isInt(String s) {
//判断是否是整数
for(int i=0;i<s.length();i++) {
if(!(s.charAt(i)>='0'&&s.charAt(i)<='9')) {
return false;
}
}
return true;
}
}