7-3事務書類ページ番号印刷(20点)

古い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;
	}
}

おすすめ

転載: blog.csdn.net/timelessx_x/article/details/111910543