如何在保留空白位置和大小的同时按空格分隔符进行拆分

时间:2016-10-13 15:11:01

标签: java string split

我想拆分字符串并将空格视为分隔符。我需要知道字符串的每两个单词之间存在多少个空格。例如:

很冷被分割为:

一个空间

一个空间

冷。

感冒被拆分为:

两个空格

两个空格

冷。

我需要这样做才能根据字节在字符串中找到单词的位置。例如,在第一句中, cold 的位置在7到10个字节之间。

我编写了以下代码,但我认为所有的空格都是在一个空格之后发生的。

1)

StringTokenizer tokens= new StringTokenizer(content);
        while(tokens.hasMoreTokens())
        {
            String term= tokens.nextToken();
            prePos=position;
            int len= term.length();
            position= position+len;
            bw.append(term+"\t"+prePos+"\t"+position+"\n");
            if(tokens.hasMoreTokens())
                position =position +2;
        }

2)

String[]tokens=content.split("\\s+");
        for(String str:tokens)
        {
            prePos=position;
            int len= str.length();
            position= position+len;
            bw.append(str+"\t"+prePos+"\t"+position+"\n");
            position =position +2;
        }

3 个答案:

答案 0 :(得分:1)

您希望在文本更改为空格[^\\s]\\s时以及当空格更改为文本\\s[^\\s]时拆分。

将这些变体放入非捕获组,然后or将它们放在一起:

final String regex = "(?<=[^\\s])(?=\\s)|(?<=\\s)(?=[^\\s])"
final String test = "It  is   cold";
final String[] result = test.split(regex);

result包含的内容:["It", " ", "is", " ", "cold"]

答案 1 :(得分:0)

如果要计算空格。试试这个,

public static void main(String[] args) 
{

String s = "It is cold";

int cnt=0;

for(int i=0;i<s.length();i++)

        if(s.charAt(i)==' ')
        {
            cnt++;
        }
    }
System.out.println("WHITE SPACE COUNT : "+cnt);
}

答案 2 :(得分:0)

我在@AKS 123提示的帮助下解决了我的问题。

int position=0;
int prePos=0;
int cnt=0;
String term="";

        for(int i=0;i<content.length();i++)

                if(content.charAt(i)==' ')
                {

                    cnt++;

                    while(content.charAt(i+1)==' ')
                    {
                        cnt++;
                        i++;
                    }

                    prePos=position;
                    int len= term.length();
                    position= position+len;
                    bw.append(term+"\t"+prePos+"\t"+position+"\n");
                    position=position+cnt;
                    term="";
                    cnt=0;
                }
                else
                    term=term+content.charAt(i);