在文件扫描程序~Java中操作字符串

时间:2014-02-25 10:13:32

标签: java file substring delimiter

我收到了一个文件,其中包含姓名电话号码,来电和外出电话等等......就像这样

Adams#Marilyn#8233331109#0#0#01012014#C
Anderson#John#5025559980#20#15#12152013#M
Baker-Brown#Angelica#9021329944#0#3#02112014#C

#是数据项之间的分隔符,每行都将呼叫状态作为最后一项。 我需要知道如何在屏幕上以如下格式显示每个人的信息:

姓名电话呼叫最后呼叫中的呼叫

玛丽莲亚当斯(823)333-1109 0 0 01-01-2104
John Anderson(502)555-9980 20 15 12-15-2013
Angelica Baker-Brown(859)254-1109 11 5 02-11-2014

我必须使用substring方法来提取电话号码并添加括号/短划线等...

到目前为止,我的代码看起来像这样 我也是初学Java编码类....

import java.util.Scanner;
import java.io.*;

public class phonedata2_1 {
    public static void main(String[] args) throws IOException {

        String Phonefile, FirstName, LastName;
        Scanner PhoneScan, fileScan;

        System.out.println("    Name      Phone      Calls Out       Calls In       Last Call           Status");

        fileScan = new Scanner(new File("phonedata.txt"));

        while (fileScan.hasNext()) {
            Phonefile = fileScan.nextLine();

            PhoneScan = new Scanner(Phonefile);
            PhoneScan.useDelimiter("#");

            System.out.println(PhoneScan.next() + " " 
                    + PhoneScan.next() + "\t" 
                    + PhoneScan.next() + "\t"
                    + PhoneScan.next() + "\t" 
                    + PhoneScan.next() + "\t" 
                    + PhoneScan.next() + "\t" 
                    + PhoneScan.next());
        }
        System.out.println("\nTotal outgoing calls for the period: " + "\nTotal incoming calls    for the period: \n");

    }
}

3 个答案:

答案 0 :(得分:0)

您可以使用.split(String regex)分割您正在阅读的行,方法是将#作为分隔符。这将生成一个数组,您可以相应地遍历和打印内容。此外,似乎除了初始行之外,所有调用数据都以开头,因此您可以使用拆分两次来解析文本文件:

编辑:看到你的评论,我也意识到,之后,因为.split()方法将正则表达式作为参数,这意味着可以毫不费力地走动这个问题。我的例子如下:

    String str = "Adams#Marilyn#8233331109#0#0#01012014#C Anderson#John#5025559980#20#15#12152013#M Baker-Brown#Angelica#9021329944#0#3#02112014#C";
    String[] lines = str.split(" ");
    System.out.println("Name\tPhone\tCalls\tOut\tCalls In\tLast Call");
    for(String line : lines)
    {
        String[] lineInfo = line.split("#");
        for(String info : lineInfo)
        {
            System.out.print(info + "\t");
        }
        System.out.println();
    }

我必须手动添加一些额外的标签,但这是输出:

Name        Phone       Calls       Out Calls In    Last Call
Adams       Marilyn     8233331109  0   0           01012014    C   
Anderson    John        5025559980  20  15          12152013    M   
Baker-Brown Angelica    9021329944  0   3           02112014    C   

答案 1 :(得分:0)

这样的事情应该有效。您仍然需要自己对电话号码进行所有操作,但所有数据都将出现在电话信息中,以便您可以从中进行操作!

while (fileScan.hasNext())
    {
        //Get a single record
        Phonefile = fileScan.nextLine();

        //Seperate the elements of the record        
        String[] callInfo = Phonefile.split("#");

        for(String infoPart: callInfo)
        {
            System.out.print(infoPart+ "\t");
        }

        System.out.println()
    }

答案 2 :(得分:0)

使用正则表达式查找每个“数据段”,然后使用#作为分隔符将其拆分并打印出来:

    File blub = new File("blub.txt");

    Scanner scanner = null;
    try
    {
        scanner = new Scanner(blub);
    }
    catch (FileNotFoundException e){}


    while(scanner.hasNext("((\\S*)#){6}(\\w)"))
    {
        String buffer = scanner.next("((\\S*)#){6}(\\w)");
        for(String value : buffer.split("#"))
            System.out.print(value + " ");
        System.out.println();
    }

<强>输出:

Adams Marilyn 8233331109 0 0 01012014 C 
Anderson John 5025559980 20 15 12152013 M 
Baker-Brown Angelica 9021329944 0 3 02112014 C 

注意: 您可以使用任何空白字符来分隔输入文件中的每个数据段,因此即使空格也可以或制表符(或者与空行混合等等)。

进一步使用数据:
您可以在arraylist中添加数据,因为buffer.split(“#”)为您提供了一个数据段数组,因此您可以更容易地输出每个值所需的更改(或以不同的顺序)