0

我有以下情况:

  1. 从数据库中读取包含西里尔字母的字段。

    String title = (String)dbTable.getAttribute("title");
    
  2. 在 JSP 页面中显示此标题 - 如果标题包含超过 10 个单词,则仅显示前 10 个单词,否则显示完整标题。

完整的标题显示得很好。

为了从标题中获得 10 个单词,我使用了代码:

      String t1 = (String)dbTable.getAttribute("title");
      String t2 = t1.split("\\w", 11);
      title = t2[10];

但是得到了奇怪的结果——显然我错过了关于方法拆分的一些东西。

例如

t1 = "Внасяне от осигурителя на осигурителните вноски за държавното обществено осигуряване и допълнително задължително пенсионно осигуряване върху начислени, но неизплатени възнаграждения или върху неначислени възнаграждения, отнасящи се за труд, положен през месец Март 2012 г. (първият работен ден след 30 Април 2012 г. е 02 Май 2012 г.)";
t2 returns "г. е 02 Май 2012 г.) "

这不是我想要的结果。

我试图查看 t2[0] , t2[1] 等等 - 但也没有得到预期的结果 - 在 t2[0] 我从该字符串的开头得到了前 5 个单词 - 而不仅仅是第一个单词.

问题是我在拆分时做错了什么,或者如何在西里尔字符串上进行拆分,或者请提出一些解决方法。

4

4 回答 4

1

尝试使用"\\s+"而不是"\\w"

于 2013-04-29T13:12:48.840 回答
1

我不会在这里使用正则表达式。对于极其简单的解析,手动进行比使用正则表达式更快(在这种情况下,更简单)。

public class FirstTenTest {
  public static void main (String... args) {
    String myString = "Внасяне от осигурителя на осигурителните вноски за държавното обществено осигуряване и допълнително задължително пенсионно осигуряване върху начислени, но неизплатени възнаграждения или върху неначислени възнаграждения, отнасящи се за труд, положен през месец Март 2012 г. (първият работен ден след 30 Април 2012 г. е 02 Май 2012 г.)";

    System.out.println(firstTenWords(myString));
  }

  public static String firstTenWords(String input) {
    StringBuilder sb = new StringBuilder();
    int spaceCount = 0;
    for(char c : input.toCharArray()) {
      if (c == ' ') spaceCount++;
      if (spaceCount == 10) break;
      sb.append(c);
    }
    return sb.toString();
  } 
}

输出:

Внасяне от осигурителя на осигурителните вноски за държавното обществено осигуряване
于 2013-04-29T13:13:03.873 回答
1

String[] t2 = t1.split("\\w", 11);实际上意味着:将字符串 t1 拆分为一个单词字符(az、AZ、0-9 或 _),并且最多只给我 11 个拆分成员。

空格的字符类是 \\s

于 2013-04-29T13:15:19.723 回答
0

根据我的理解,您可以实施的步骤不确定西里尔字母

1.获取标题长度

2.检查字符串的长度

3.如果长度大于10则使用title.substring(startindex, endIndex)返回

4.如果title < 10则返回title实际字符串

于 2013-04-29T13:12:02.847 回答