2016-10-19 6 views
0

как я прочитал «Dr. Dr. John Doe [email protected]» (line_split [0]) на две отдельные строки (имя и электронной почты в MailEntry,. Название имеет неограниченное количество слов.Split линии на две строки, используя BufferedReader Java

ArrayList<MailEntry> Daten = new ArrayList<MailEntry>(); 

try { 
    File file = new File("MailDaten.txt"); 
    FileReader fileReader = new FileReader(file); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 
    StringBuffer stringBuffer = new StringBuffer(); 
    String line; 
    while ((line = bufferedReader.readLine()) != null) { 
     String[] line_split = line.split(" "); 
     Daten.add(new MailEntry(line_split[0], line_split[5], 
       new TimeEntry(line_split[1], line_split[2], line_split[3], line_split[4]))); 
     stringBuffer.append(line); 
     stringBuffer.append("\n"); 
    } 
    fileReader.close(); 
    System.out.println("Contents of file:"); 
    System.out.println(stringBuffer.toString()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

Если имя может иметь неограниченное количество слов, почему вы используете жестко закодированные индексы? – rmlan

+0

Вы пытались выполнить поиск в google для регулярного выражения для emailid в строке для java –

+0

Строго говоря, адрес электронной почты может содержать пробелы, если они находятся в кавычной строке. Таким образом, расщепление пространства в качестве первого шага - плохая идея. Очень важно понять, что адрес электронной почты может быть намного больше, чем «обычный» [email protected] – RealSkeptic

ответ

0

Вы . можно написать регулярное выражение для разделения его Вы хотите разделить только на последнем пространстве:

\\s+(?=[^\\s]*$) 

    \\s+ - whitspace for 1 or more characters 
    (?= ) - a group that is not included. will not be used up by the split 
    [^\\s]* - not whitespace for any amount of characters 
    $  - end of line 

Пример использования:

String test = "Dr. Dr. John Doe [email protected]"; 
String regex = "\\s+(?=[^\\s]*$)"; 
String[] result = test.split(regex); 
System.out.println(result[0]); 
System.out.println(result[1]); 

который печатает:

Dr. Dr. John Doe 
[email protected] 
+0

Строго говоря, адрес электронной почты (локальная часть) может содержать пробелы, если они находятся в кавычной строке. – RealSkeptic

+0

@RealSkeptic hmmm, что делает эту проблему намного сложнее – flakes

0

Вы можете использовать следующий подход для requirement-

  1. Split каждой записи в список лексем, разделенных пространством.
  2. Итеражируйте маркеры thesd и отметьте «@» в каждом токене. Если он существует, скопируйте его как адрес электронной почты.
  3. Else concatinate token seprated by space. Это даст вам имя.

Надеюсь, этот ответ на ваш запрос! Приветствия.

0

Вы можете попробовать это просто Выполненное это

String test = "Dr. Dr. John Doe [email protected]"; 
     int s = test.split("@")[0].lastIndexOf(" "); 
     String s1 = test.substring(0,s); 
     String s2 = test.substring(s+1,test.length()); 
     System.out.println(s1); 
     System.out.println(s2); 
0

Вы должны получить электронную почту и вычесть его из фактической строки. Вы можете использовать функцию split или использовать функцию indexOf. Использование функции split показано выше. Вы также можете сделать следующее.

public static void main(final String[] args) { 
    final String nameAndMail = "Dr. Dr. John Doe [email protected]"; 
    String name = ""; 
    String mail = ""; 
    final String mailPattern = "\\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}\\b"; 
    final Pattern p = Pattern.compile(mailPattern, 
      Pattern.CASE_INSENSITIVE); 
    final Matcher matcher = p.matcher(nameAndMail); 
    final Set<String> mailList = new HashSet<String>(); // If you have multiple emails in the string 

    while (matcher.find()) { 
     mail = matcher.group(); 
     // mailList.add(mail); 
     name = nameAndMail.substring(0, nameAndMail.indexOf(mail)); 
    } 
    System.out.println("Name is::" + name); 
    System.out.println("Mail is::" + mail); 
} 

Выход выше код:

Name is::Dr. Dr. John Doe  
Mail is::[email protected] 
+0

, вы можете изменить часть регулярного выражения, чтобы сделать ее более гибкой. Если строка содержит несколько писем, то внутри цикла while вы можете добавить почтовую переменную в ArrayList. – karna

 Смежные вопросы

  • Нет связанных вопросов^_^