2016-10-13 6 views
0

8桁の数字ではなく、単語を配列に格納する必要があります。そうでない場合は、コンソールに出力するだけです。配列に入ると、それらをソートして右側に印刷し、左側にソートされていないリストがあります。カンマと単語を含むファイルを読み込み、アレイ内の番号のみを格納する必要がありますか?

カンマで区切られているので、カンマやスペースがない場合にのみ機能します。私は "compareTo"メソッドと "StringTokenizer"メソッドを使用することになっていますが、どちらも動作していますが、ちょうど私が望むことをしない、おそらく私は間違った関数に入れています。私はまた、このファイルを分けて、そのファイルに何を置くべきかわからないGUI機能を別々のファイルに入れる必要があります。

public class Project1 { 
static final int LIST_SIZE = 10; 
static int ssnSize; 
static String line; 
static String[] ssnList; 
static TextFileInput inFile; 
static String inFileName = "Dates.txt"; //save the file in Lab12 folder on BB in your project folder 
static JFrame myFrame; 
static Container myContentPane; 
static TextArea left, right; 

public static void main(String[] args) { 
    initialize(); 
    readNumbersFromFile(inFileName); 
    printSSNList(ssnList,ssnSize); 
    printSSNtoJFrame(myFrame,ssnSize); 
} 

public static void initialize() { 
    inFile = new TextFileInput(inFileName); 
    ssnList= new String[LIST_SIZE]; 
    ssnSize=0; 
    line =""; 
    left = new TextArea(); 
    right = new TextArea(); 
    myFrame = new JFrame(); 
    myFrame.setSize(400, 400); 
    myFrame.setLocation(200, 200); 
    myFrame.setTitle(""); 
    myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

public static void readNumbersFromFile(String fileName) 
{ 
     String ssn; 
     ssn = inFile.readLine(); 
     while (ssn != null) { 
      assert (isValidDate(ssn)): "SSN not valid"; 
      if (!isValidDate(ssn)) 
       throw new IllegalArgumentException("Invalid SSN"); 
      else 
       storeDates(ssn,ssnList); 
      ssn = inFile.readLine(); 
     } //while 

} //readSSNsFromFile 

public static void printSSNList(String[] list, int size) 
{ 
     assert (isValidList(list)): "The array is not valid"; 
     if (!isValidList(list)){ 
      throw new IllegalArgumentException("Invalid list)"); 
     } 
     for (int i=0;i<size;i++) 
      if (!isValidDate(list[i])) 
       System.out.println("Invalid SSN: "+list[i]); 
      else 
       System.out.println(list[i]); 
} 

public static void storeDates(String s, String[] list) 
{ 
     assert (isValidDate(s)): "The SSN is not valid"; 
     assert (isValidList(list)): "The array is not valid"; 

     if (isValidDate(s) && isValidList(list)) 
      list[ssnSize++]=s; 
     assert (isValidList(list)):"Resulting list not valid"; 
} 

public static void printSSNtoJFrame(JFrame jf, int size) 
{ 
     assert (isValidList(ssnList)): "The array is not valid"; 
     if (!isValidList(ssnList)){ 
      throw new IllegalArgumentException("Invalid list)"); 
     } 

     jf.setLayout(new GridLayout(1, 2)); 
     myContentPane = jf.getContentPane(); 
     TextArea myLeftArea = new TextArea(); 
     TextArea myRightTextArea = new TextArea(); 
     myContentPane.add(myLeftArea); 
     myContentPane.add(myRightTextArea); 


     for (int i=0;i<size;i++) 
     { 
       if (!isValidDate(ssnList[i])) 
        myLeftArea.append("Invalid SSN: "+ssnList[i]+"\n"); 
       else 
       { 
        myLeftArea.append(ssnList[i]+"\n"); 
       } 
     } 


     sortOnlyNumbers(ssnList); 

     for(int j=0; j< size; j++) 
     { 
       myRightTextArea.append(ssnList[j]+"\n"); 
     } 
     jf.setVisible(true); 
} 

private static void sortOnlyNumbers(String[] array) 
{ 
    List<Integer> indexes = new ArrayList<Integer>(); 
    List<Integer> numbers = new ArrayList<Integer>(); 
    for (int i = 0; i < array.length; i++) { 
     try { 
      numbers.add(Integer.parseInt(array[i])); 
      indexes.add(i); 
     } catch (NumberFormatException e) { 
      // don't care 
     } 
    } 
    Collections.sort(numbers, Collections.reverseOrder()); 
    for (int i = 0; i < numbers.size(); i++) { 
     array[indexes.get(i)] = String.valueOf(numbers.get(i)); 
    } 
} 

public static boolean isValidDate(String s) 
{ 
     if (s.length() != 8) { 
     throw new IllegalArgumentException("An SSN length must be 9"); 
     } 
     for (int i=0;i<8;i++) 
      if (! Character.isDigit(s.charAt(i))) { 
       throw new IllegalArgumentException("SSN must have only digits."); 
     } 
     return (true); 
} 

public static boolean isValidList(String[] list) 
{ 
     if (list == null){ 
      return false; 
     } 
     if (ssnSize == list.length){ 
      return false; 
     } 
     return (true); 
} 

}

テキストファイルには、以下があります。

20080912,20131120,19980927、\ nは 20020202、こんにちはあなたが使用することができます

答えて

0

これを実行する正規表現。あなたの条件のために適切なものは次のようになります。

(\d{8})

この正規表現は、あなたの入力データで8つの連続した数字のグループにマッチします。

以下のスニペットを使用してこれをテストし、入力文字列から8桁の数字をすべて取得できました。

public class Snippet { 
    public static void main(String[] args) { 
     String input = "20161001 20080912,20131120,19980927, \n 20020202,hello 20120104"; 
     List<String> matches = get8DigitNumbersOnly(input); 
     System.out.println(matches); 
    } 

    public static List<String> get8DigitNumbersOnly(String inputData) { 
     Pattern pattern = Pattern.compile("(\\d{8})"); // This is the regex. 
     Matcher matcher = pattern.matcher(inputData); 
     List<String> matches = new ArrayList<String>(); 
     while(matcher.find()) { 
      String match = matcher.group(); 
      matches.add(match); 
     } 
     return matches; 
    } 
} 

ショットをつけてください。お役に立てれば!

関連する問題