如何让Java拆分为Cyrillic字符串

时间:2013-04-29 13:04:14

标签: java split

我有以下情况:

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

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

  3. 完整标题显示良好。

    为了从标题中获得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 个答案:

答案 0 :(得分:1)

尝试使用"\\s+"代替"\\w"

答案 1 :(得分: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();
  } 
}

输出:

Внасяне от осигурителя на осигурителните вноски за държавното обществено осигуряване

答案 2 :(得分:1)

String[] t2 = t1.split("\\w", 11);实际上意味着:拆分字符串t1 by a word character (a-z, A-Z, 0-9 or _),最多只给我11个分裂成员。

The character class for whitespace is \\s

答案 3 :(得分:0)

根据我的理解,您可以实施的步骤不确定cyrilic lettters

1.获取标题的长度

2.检查字符串的长度

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

4.如果标题< 10然后返回标题实际字符串