java split用多个标点拆分,并保留分隔符_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java split用多个标点拆分,并保留分隔符

java split用多个标点拆分,并保留分隔符

 2014/6/9 18:32:18  happyqing  程序员俱乐部  我要评论(0)
  • 摘要:String[]split(Stringregex)根据给定的正则表达式的匹配来拆分此字符串。注意:竖线"|"要转义写成"\\|",还有一些其他的特殊字符是需要转义的如\\.\\?等1.用多个标点拆分strs=str.split("[、,。;?!,.;?!]");strs=str.split("、|,|。|;|?|!|,|\\.|;|\\?|!|]");//这个没试,呵呵2.还想保留分隔符,笨方法:在要拆分的标点后边加一个新的拆分符,用新的拆分符拆分//这么替换,是为了拆分后,还能保存标点符号
  • 标签:Java

?

String[] split(String regex)
根据给定的正则表达式的匹配来拆分此字符串。

?

注意:竖线"|" 要转义写成 "\\|",还有一些其他的特殊字符是需要转义的 如 \\. \\? 等

?

1.用多个标点拆分

strs = str.split("[、,。;?!,.;?!]");

strs = str.split("、|,|。|;|?|!|,|\\.|;|\\?|!|]"); //这个没试,呵呵

?

2.还想保留分隔符,

笨方法:在要拆分的标点后边加一个新的拆分符,用新的拆分符拆分

class="java" name="code">//这么替换,是为了拆分后,还能保存标点符号,//可再优化 
line = line.replaceAll("、", "、|");
line = line.replaceAll(",", ",|");
line = line.replaceAll("。", "。|");
line = line.replaceAll(";", ";|");
line = line.replaceAll("?", "?|");
line = line.replaceAll("!", "!|");
line = line.replaceAll(",", ",|");
line = line.replaceAll("\\.", ".|");
line = line.replaceAll(";", ";|");
line = line.replaceAll("\\?", "?|");
line = line.replaceAll("!", "!|");
strs = line.split("\\|");

?

感觉这个有点土,自己写了个方法,仅供参考:

用StringBuilder,一个一个字符的去拼。

phrase = new Phrase(str,String.valueOf(ch),l+1,++no);
Phrase 是自定义类,第一个参数是短句,第二个参数是标点

?

reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),encoding)); //考虑到编码格式  
String line; 
StringBuilder sb;
//int num = 0;    //总句码
int l=0;        //行序号
while((line = reader.readLine()) != null){ 
    //line = new String(line.getBytes("ISO-8859-1"),"UTF-8");
    //System.out.println(line); 
    //line = line.replaceAll("[,。;?!,.;?!]", "|");
    line = line.replaceAll("| ", "");
    sb = new StringBuilder();
    String str="";
    //String punctuation = "";
    //line = ",abcdev,";//abcdev,asdfasdf.asfejfl;3f23f!;efefef";
    char[] chars = line.toCharArray();
    int no = 0;
    for(char ch : chars){
        if(ch == 65279){    //'' //'' //65279 utf-8 bom
            continue;
        }
        if("、,。;?!,.;?!".indexOf(ch) == -1){
            sb.append(ch);
        } else {
           //System.out.println(sb.toString()+ch);
            str = sb.toString();
            if(str.length()>0){
                phrase = new Phrase(str,String.valueOf(ch),l+1,++no);
                phraseList.add(phrase);   
            }
            sb = new StringBuilder();
        } 
    }

    //后边的没标点的短句
    str = sb.toString();
    if(str.length()>0){ 
        //System.out.println(str);   
        phrase = new Phrase(str,"",l+1,++no);
        phraseList.add(phrase);
    }
    l++;
}
reader.close(); 

?

别人的解决方法

http://www.iteye.com/problems/27173

/*需要分割的文章*/  
String str = "第一句。第二句!第三句:第四句;第五句。";   
  
/*正则表达式:句子结束符*/  
String regEx=":|。|!|;";    
Pattern p =Pattern.compile(regEx);   
Matcher m = p.matcher(str);   
  
/*按照句子结束符分割句子*/  
String[] words = p.split(str);   
  
/*将句子结束符连接到相应的句子后*/  
if(words.length > 0)   
{   
    int count = 0;   
    while(count < words.length)   
    {   
        if(m.find())   
        {   
            words[count] += m.group();   
        }   
        count++;   
    }   
}   
  
/*输出结果*/  
for(int index = 0; index < words.length; index++)   
{   
    String word = words[index];   
    System.out.println("word = " + word);   
}

???

其他的:

替换中英文空格为空

line = line.replaceAll("| ", "");

?

替换回车换行为空,注意中间写的是或,因为有的只有一个,有的顺序不同

line = line.replaceAll("\n|\r", "");

?

?

上一篇: 读取XML某一节点 下一篇: 没有下一篇了!
发表评论
用户名: 匿名