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

请教~~~之前问过,但是又出现了新问题
1 语料库 中 存放 是 在 语言 实际 使用 。 中 真实 出现过 语言 材料 。 国家 建设   
2 语料库 是 承载 语言 知识 。 基础 资源 不等于 语言 知识 。

问题描述如下:
*******************************************************************************************
  以上是我要处理的字符串,分两行,语句是分好词的,想统计每行中各句话的开起始位置。
最后的结果类似如下形式
  1:1-8~10-14~15-16
  就是第一行:第一句话是第1个词到第8个词,第二句是第10个词到第14个词(因为句号占了1个词,所  
  以第二句是从第10个词开始)
  2:1-5~7-11  
*******************************************************************************************  
String[] sa = {
  "语料库 中 存放 是 在 语言 实际 使用 。 中 真实 出现过 语言 材料 。 国家 建设 ",
  "语料库 是 承载 语言 知识 。 基础 资源 不等于 语言 知识 。"
};

for (int i=0, j=0; i<sa.length; i++) {
  StringBuilder sb = new StringBuilder();
  sb.append(i+1).append(":").append(1);
  String[] ss = sa[i].split("\\s+");
  for (j=0; j<ss.length; j++) {
  if (ss[j].equals("。")) {
  sb.append("-").append(j);
  if (j != ss.length-1) {
  sb.append("~").append(j+2);
  }
  }  
  }
  System.out.println(sb);
}

这个程序只能处理最后末尾有句号的,但是像我举得第一行的例子,末尾没有句号,就统计不出来位置,求解~~~~~~~~~

------解决方案--------------------
Java code

String[] sa = {
                "语料库 中 存放 是 在 语言 实际 使用 。 中 真实 出现过 语言 材料 。 国家 建设 ",
                "语料库 是 承载 语言 知识 。 基础 资源 不等于 语言 知识 "
        };
        for (int i=0, j=0; i<sa.length; i++) {
            StringBuilder sb = new StringBuilder();
            sb.append(i+1).append(":").append(1);
            String[] ss = sa[i].split("\\s+");
            for (j=0; j<ss.length; j++) {
                if (ss[j].equals("。")) {
                    sb.append("-").append(j);
                    if (j != ss.length-1) {
                        sb.append("~").append(j+2);
                    }
                }else if(j==ss.length-1){
                    sb.append("-").append(j+1);
                } 
            }
            System.out.println(sb);
        }