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,你好