如何删除字符串中的多余换行符

时间:2018-09-09 08:10:11

标签: java string split system.out

我的String中有一个这样的文本(我已经从txt.file中读取了它)

 trump;Donald Trump;trump@yahoo.eu    
 obama;Barack Obama;obama@google.com   
 bush;George Bush;bush@inbox.com    
 clinton,Bill Clinton;clinton@mail.com

然后,我试图切断除电子邮件地址之外的所有内容,并在控制台上打印出

String f1[] = null;
f1=s.split("(.*?);");
for (int i=0;i<f1.length;i++) {
       System.out.print(f1[i]);
   }

我的输出是这样的:

trump@yahoo.eu  
obama@google.com   
bush@inbox.com  
clinton@mail.com

如何避免此类输出,我的意思是如何在没有换行符的情况下获得输出文本?

5 个答案:

答案 0 :(得分:1)

尝试使用以下方法。我已经用ScannerBufferedReader阅读了您的文件,在两种情况下,我都没有换行。 file.txt是包含文本的文件,分割逻辑与您保持相同

public class CC {
public static void main(String[] args) throws IOException {
    Scanner scan = new Scanner(new File("file.txt"));

    while (scan.hasNext()) {
        String f1[] = null;
        f1 = scan.nextLine().split("(.*?);");
        for (int i = 0; i < f1.length; i++) {
            System.out.print(f1[i]);
        }
    }
    scan.close();

    BufferedReader br = new BufferedReader(new FileReader(new File("file.txt")));
    String str = null;
    while ((str = br.readLine()) != null) {
        String f1[] = null;
        f1 = str.split("(.*?);");
        for (int i = 0; i < f1.length; i++) {
            System.out.print(f1[i]);
        }
    }
    br.close();
}
}

答案 1 :(得分:1)

您可以按照下面的代码所示更换所有断路器:

String f1[] = null;
f1=s.split("(.*?);");
for (int i=0;i<f1.length;i++) {
    System.out.print(f1[i].replaceAll("\r", "").replaceAll("\n", ""));
}

这将用空格将它们全部替换。

答案 2 :(得分:0)

package com.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {
        String s = "trump;Donald Trump;trump@yahoo.eu    "
                + "obama;Barack Obama;obama@google.com   "
                + "bush;George Bush;bush@inbox.com    "
                + "clinton;Bill Clinton;clinton@mail.com";

        String spaceStrings[] = s.split("[\\s,;]+");
        String output="";
        for(String word:spaceStrings){
            if(validate(word)){
                output+=word;
            }
        }
        System.out.println(output);
    }

    public static final Pattern VALID_EMAIL_ADDRESS_REGEX = Pattern.compile(
            "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$",
            Pattern.CASE_INSENSITIVE);

    public static boolean validate(String emailStr) {
        Matcher matcher = VALID_EMAIL_ADDRESS_REGEX.matcher(emailStr);
        return matcher.find();
    }

}

答案 3 :(得分:0)

您可以使用分号字符类[^\\s;]+,然后用@而不是分号或空格字符一次或多次,而不是分号或空格字符,而不是拆分来匹配类似格式的电子邮件字符。

final String regex = "[^\\s;]+@[^\\s;]+";
final String string = "trump;Donald Trump;trump@yahoo.eu    \n"
         + " obama;Barack Obama;obama@google.com   \n"
         + " bush;George Bush;bush@inbox.com    \n"
         + " clinton,Bill Clinton;clinton@mail.com";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
final List<String> matches = new ArrayList<String>();
while (matcher.find()) {
    matches.add(matcher.group());
}
System.out.println(String.join("", matches));

[^\\s;]+@[^\\s;]+

Regex demo

Java demo

答案 4 :(得分:0)

只需替换可能在开始和结束时出现的'\ n'。 这样写。

String f1[] = null;
f1=s.split("(.*?);");
for (int i=0;i<f1.length;i++) {
f1[i] = f1[i].replace("\n");
System.out.print(f1[i]);
}