[java]删除非载波空间

[java]删除非载波空间,java,parsing,html-parsing,Java,Parsing,Html Parsing,我有一个带有多个空格的字符串,这是不必要的,我想删除该空格,并需要一个结构良好的输出。我需要在单词之间留一个空格。 输入:数字后,第一个单词前有空格。。5新行,带@line有多个空格 1 An item one area city, country type of area time of event 1 2 An item one area city, coun

我有一个带有多个空格的字符串,这是不必要的,我想删除该空格,并需要一个结构良好的输出。我需要在单词之间留一个空格。 输入:数字后,第一个单词前有空格。。5新行,带@line有多个空格

1





        An item one



        area city, country 
        type of area
        time of event 1

2





        An item one



        area  city, country 
        type of area
        time of event 1

3 ... idem
`

我想要的是这样的结构:

一项;地区、城市、国家;区域类型;事件1发生的时间

第二项;地区、城市、国家;区域类型;事件2发生的时间;
.
.
.

我试着用
st.replaceAll(“\n”和“)
但这并不是我所期望的。。 我需要帮助

更新部分解决,并且已经存在另一个问题

  • 问题1

            s = s.replaceAll("\\n+", " ");
            s = s.trim();
            s = s.replaceAll(" \\s+", ";");
    
    输出:

  • An item one;area city, country;type of area;time of event 1
    
    1一项;地区、城市、国家;区域类型;事件1的时间
    二第一项;地区城市、乡村;区域类型;事件1的时间
    

    现在第二个问题已经存在了,比如一个单词中有超过1个空格


    area-city
    ,结果为
    area;城市
    ,因此请帮助我完成此…

    将此用于您所需的输出:

        public static void main(String[] args) {
        String s= "abc     def    agig";
        s=s.trim(); // thanks to Christian for the suggestion. 
        s= s.replaceAll("\\s+", " ");
        System.out.println(s);
    
        O/P : abc def agig
    
    输入:

    An item one
    
    
    
    area city, country
    type of area
    time of event 1
    
    使用方法如下:

    st=st.replaceAll(“\\r?\\n+”,“;”)

    输出:

    An item one;area city, country;type of area;time of event 1
    

    目标是从多行变成分号分隔的文本,并删除额外的空格

    也许您需要使用多行代码。首先去掉额外的新行,然后是额外的空格,然后放入分号并连接行

    因此,首先将所有双新线替换为单新线:

    st = st.replace("\r", "\n"); // just in case you have windows new line
    st = st.replace("\n\n", ); // optional, else string tokeizer will by default iggnore consecutive seperators 
    
    现在,一个字符串标记器在新行上断开

    logger.info("Initial :[[[" + st + "]]]");
    StringTokenizer st1 = new StringTokenizer (st, "\n");
    StringBuilder sb = new StringBuilder (); //the final string, will be built here
    boolean first = true;
    while(st1.hasMoreTokens(){
        s = st1.nextToken();
        s = s.trim();
        s =  s.replace("  ", " ");//two spaces with one
        if(frist){
           first = false;
        }else{
            sb.append(";");
        }
        sb.append(s);
    }
    logger.info("Final :[[[" + sb + "]]]");
    

  • 这不是编译后的代码,只是为了清晰起见在这里编写

  • 如果不使用日志记录,则应使用System.out.println

  • 比如说

    System.out.println("abcd           ipsum          dolor \n sit.".replaceAll("\\s+", " "));
    
    输出

    abcd ipsum dolor sit.
    

    建议使用delimiterFAIL,您的结果与原始问题不符。请参阅我的答案以了解正确的方式。如果单词之间有多个空格,该怎么办?修剪不会去掉那个。修剪只删除左右两端是的,我仍然失败,我只是纠正我的帖子。。。。很抱歉我刚刚删除[已解决],但问题仍然存在请澄清,是否要删除^number\r\n?我肯定会说,空格不是在结尾或开头。如果反对者愿意留下评论,我可以了解更多内容:)@克里斯蒂安-哦。。“应该是”。我的错。将一次或多次发生的“”替换为“”。没有看到我键入了“”。也使用
    trim()
    ,因为OP字符串后面有空格。是否使用
    s=s.replaceAll(“\\s+”,”)不替换尾随空格?结果是
    1;第一项;地区、城市、国家;区域类型;事件1发生的时间
    @user3145749您的输入字符串是什么?@user3145749您是否在used regex中使用了+作为
    \\r?\\n+
    ?@enhaka您能给我准确的输入您正在使用什么吗?准确的输入显示在我的ask post上。。输入:数字后,第一个单词前有空格。。5新行,带@line有多个空格