我想在java

时间:2016-12-07 06:07:52

标签: java arrays arraylist format

我还没有找到任何与我的情况相似的问题所以我希望我不会错过任何东西。

我有一个字符串数组。我想用逗号和间距在自己的行上打印每3个字符串。

这是我的方法:

public static void Modify(String stringSearch)
{
    ArrayList<String> records = new ArrayList<String>();
    try {
        File file = new File("Temp.txt");
        input = new Scanner(file);
    }
    catch (IOException ioe) {
        ioe.printStackTrace();
    }

    if (input.hasNext()) {
        while (input.hasNext())
        {
            String firstName = input.next();
            String lastName = input.next();
            String phoneNumber = input.next();

            if ((Objects.equals(firstName, stringSearch)) || (Objects.equals(lastName, stringSearch)) || (Objects.equals(phoneNumber, stringSearch))) {

                records.add(firstName);
                records.add(lastName);
                records.add(phoneNumber);
            }
        } // end while
    }
    int size;
    size = (records.size()) / 3;
    System.out.printf("Found %d records:%n", size);

    String[] Array = records.toArray(new String[0]);

    for (int s = 0; s < Array.length; s++) {
        System.out.printf("%s", Array[s]);
    }
}

我正在将arrayList转换为字符串数组,以便尝试格式化它。我对java非常陌生,并且正在处理一个时间紧迫的项目。

我需要它打印完全像这样:

找到2条记录:

1) Garcia,     John      505-338-2567
2) John,       Joseph    212-780-3342 

这样打印:

找到2条记录:

GarciaJohn505-338-2567JohnJoseph212-780-3342

4 个答案:

答案 0 :(得分:0)

Java是一种面向对象的语言,您应该使用它。

创建一个代表Person的班级,其中firstNamelastNamephoneNumber字段

然后创建一个包含2个对象的List<Person>,并编写一个打印该列表的方法。您已经使用的System.out.printf()可以帮助您按照自己的意愿输出值。

答案 1 :(得分:0)

您可能需要使用符合您需求的toString()方法创建自己的数据结构。

类似的东西:

public class PersonalCustomerData {
    private String firstName;
    private String lastName;
    private String phoneNumber;


...


    @Override
    public String toString() {
        return lastName + "," + " " + firstName + " " + phoneNumber;
    }
}

而且,正如@Andreas在他的回答中提到的,你还需要一个Collection<PersonalCustomerData>,当你迭代它时,你打印完全格式化的输出:

private Collection<PersonalCustomerData> col;

// init the collection + do stuff...

public void printCustomerData() {
    int lineNumber = 0;

    for(PersonalCustomerData pcd : col) {
        lineNumber++;

        System.out.println(lineNumber + ")" + " " + pcd);
    }
}

答案 2 :(得分:0)

如果您不想使用object来包含您的价值观并坚持您的行动计划。您可以使用此代码以格式打印。

替换它:

     String[] Array = records.toArray(new String[0]);
     for (int s = 0; s < Array.length; s++) {
         System.out.printf("%s", Array[s]);
     }

到此:

    int numberOfLine = 1; // Counter of words per line
    String[] Array = records.toArray(new String[0]);
    for(String str : Array) {
        String strSperator = "";
        switch (numberOfLine) {
        case 1:
            strSperator = ",    ";
            numberOfLine++;
            break;
        case 2:
            strSperator = "     ";
            numberOfLine++;
            break;
        case 3:
            strSperator = "\n";
            numberOfLine = 1;
            break;
        }
        System.out.printf("%s%s",str,strSperator);
    }

答案 3 :(得分:0)

替换此行

    for (int s = 0; s < Array.length; s++) {
    System.out.printf("%s", Array[s]);`   

这样的事情。我没有测试代码,所以可能会有小错字或什么不是。我想这会做你想要的。

正如安德烈亚斯所说,如果你上一堂课,那会更好。它看起来更有条理,也可能更容易理解。

int counter = 1;
System.out.print(records.get(0) + ",\t")
while (counter !=records.size())
{
if(counter %3 ==0)
System.out.println(records.get(counter));
else if(counter% 3== 1)
System.out.print(records.get(counter) + ",\t");
else
System.out.print(records.get(counter)+ "\t");
counter ++;
}

由于您的第一个元素将始终是名字,第二个元素将是姓氏,第三个元素是电话号码,我首先打印第一个元素然后modding和while循环应该处理我相信的一切。