日期:2014-05-20  浏览次数:20828 次

关于String的split问题
我需要写个程序把英文的文章先按 . 分割成句子(String 数组) 然后再按 空格 把句子分割成单词
用split("//.")发现确实按照.进行了分割,但是每个句子中的所有空格也都没有了。这个应该怎么解决呢?

另外,split的分割关键词好像是依赖正则表达式来实现的,那么我如果希望有多个分割条件应该怎么写这个表达式呢?

------解决方案--------------------

探讨

引用:

3.14159是不是两个句子还是一个词?


这个情况确实会造成问题,包括各种网址都会出这种问题。
但是现在只假定句子里没有. 都是以.结尾

因为我需要把每句句首的大写字母转成小写字母,但是对一些特殊大写词汇要保留
所以我想不出有什么其他办法能确定这个词是句首的词

------解决方案--------------------
什么叫特殊的词?

分割句子使用 java.text.BreakIterator.getSentenceInstance(Locale.ENGLISH)
------解决方案--------------------
Java code


/*
 * 
 * 分割英语短文
 * 
 */
public class SplitEnglish {
    
    
     public static void main(String[] args){
         
         
         String str = "I love you.but you love her.wu wu wu";  //要分割的短文
         
         String[] splitSentence = str.split("\\.");          //分割短文成句子数组
         
         List<String> list = new ArrayList<String>();       //定义一个用于存储单词集合
         
         int i = 0;                                        //计数器
          
         while(splitSentence.length > i){                  //循环分割后的句子数组
             
             String[] splitWorld = splitSentence[i].split(" ");  //分割句子成单词数组
             
             for(int j=0; j<splitWorld.length; j++){           //遍历得到单词数组中的每一个单词
                 list.add(splitWorld[j]);                      //添加到单词集合中去
             }
              
             i++;                                              //计数器递增                  
         }
         
         /*
          * 打印单词集合中所有的单词
          */
         for(int j=0; j <list.size(); j++){
             System.out.print(list.get(j) + " ");
         }
     }
}