如何在java中扫描文本文件中的某些字符?

时间:2015-04-09 18:41:57

标签: java file text

我必须带这个文本文件:

Ulric Schwartz ullamcorper@Quisque.ca Fringilla Donec PC urna convallis erat
Jesse Conrad Nunc@eunulla.edu Magna Praesent Interdum Incorporated et netus          
et
Ethan Eaton cursus@Nullam.co.uk Sed Consequat Auctor Institute posuere   
vulputate lacus
Griffin Stephenson habitant@mattis.com Purus Sapien Institute auctor non 
feugiat
Alan Howell lorem@penatibusetmagnis.com Mi Limited non sollicitudin a
Sawyer Stokes ornare@utmiDuis.com Ut Institute nibh Phasellus nulla
Nigel Sanford adipiscing@euerat.org Lacus Varius Corp Integer vitae nibh

并扫描它以查找电子邮件地址,这意味着@后跟至少三个字符,一个句点,以及至少另外两个字符。我理解如何扫描文件:

while(fscan.hasNext())
{
    //scan for emails goes in here
}

但我不确定如何扫描电子邮件。 这就是我所拥有的:

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

public class lab11_emena {

    public static void main(String[] args)
    {
   Scanner cscan = new Scanner(System.in);
   System.out.println("Please enter the file name.");
   String filename = " ";
   filename= cscan.nextLine();

   File inFile = new File(filename);


            if(!inFile.exists())
            {
            System.out.println("File " + filename + " does not exist.");
            System.exit(0);
            }

            Scanner fscan =  new Scanner(inFile);//I am getting an error     
here? Saying inFile was thrown

System.out.println("Opened file " + filename); 



   }




}

3 个答案:

答案 0 :(得分:0)

您必须使用扫描仪才能阅读字符。然后检查每个事物的不同要求,如@字符。因此,如果char ==“@”,那么它将继续寻找其他要求。然后让它前进和后退,直到它在电子邮件的任何一端找到空格,然后你可以导入它们之间的所有字符。

答案 1 :(得分:0)

我首先建议在不同的信息片段(即逗号)之间使用分隔符。

实施例 Ulric Sc​​hwartz,ullamcorper @ Quisque.ca,Fringilla Donec,PC urna convallis erat

现在,如果您的所有行都具有相同数量的“类别(每个逗号之间的信息)”信息(上面的示例将有4个)。然后你可以将每个项目加载到一个数组中,然后拉出#2,6,10等。

如果类别会有所不同,那么您必须按照D3sast3r的说明进行操作,找到@,然后向前扫描并向后扫描到空格。

答案 2 :(得分:0)

尝试这样的事情。

将整个文件扫描为arraylist。默认情况下,数组使用空格作为分隔符,因为在有效的电子邮件地址中没有空格,您就可以了。

while(inputFile.hasNext()) {
    ArrayList.add(inputFile.next());
}

这会将每个字符放入数组的元素中,使用空格分隔它们。所以元素0 = Urlic,元素1 = Schwartz等...现在你可以使用一个正则表达式对象,因为gtgaxiola建议比较数组的每个元素

String email = "\\w+@\\w{3,}\\.\\w{2,}";

这基本上是一个基于您的要求的字符串对象。 “stuff”然后是@符号,然后至少3个字符,然后是一个句点,然后至少2个字符

现在使用for循环和if语句

搜索数组
for(i = 0; i < ArrayList.length(); i++) {
    if(ArrayList.get(i).contains(email) {
        //do something with the email address
    }
}