Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Java split在西里尔文字符串上工作_Java_Split - Fatal编程技术网

如何让Java split在西里尔文字符串上工作

如何让Java split在西里尔文字符串上工作,java,split,Java,Split,我有以下情况: 从数据库中读取包含西里尔字母的字段 String title = (String)dbTable.getAttribute("title"); 在JSP页面中显示此标题-如果标题包含超过10个单词,则仅显示前10个单词,否则显示完整标题 全名很好地展示了这一点 为了从标题中获得10个单词,我使用了代码: String t1 = (String)dbTable.getAttribute("title"); String t2 = t1.split("\\

我有以下情况:

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

    String title = (String)dbTable.getAttribute("title");
    
  • 在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个单词,而不仅仅是前一个单词


    问题是我在使用split时做错了什么,或者如何让split在西里尔文字符串上工作,或者请建议一些解决方法。

    根据我对西里尔文letter的理解,您可以执行的步骤不确定

    1.获取标题的长度

    2.检查字符串的长度

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


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

    步骤,根据我对西里尔文字Letters的理解,您可以执行这些步骤

    1.获取标题的长度

    2.检查字符串的长度

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


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

    尝试使用
    “\\s+”
    而不是
    “\\w”
    尝试使用
    “\\s+”
    而不是
    “\\w”
    我不会在这里使用正则表达式。对于非常简单的解析,手动执行比使用正则表达式执行要快(在本例中,更简单)

    输出:
    我不会在这里使用正则表达式。对于非常简单的解析,手动执行比使用正则表达式执行要快(在本例中,更简单)

    输出:
    String[]t2=t1.split(\\w“,11)实际上意味着:拆分字符串t1,最多只给我11个拆分的成员


    \\s
    字符串[]t2=t1.split(“\\w”,11)实际上意味着:拆分字符串t1,最多只给我11个拆分的成员


    \\s

    您希望结果是什么?您确定您正确理解了拆分的第二个参数吗?预期结果将是:
    预计结果是什么?您确定正确理解了拆分的第二个参数吗?预期结果将是:
    第三步将返回10个字母,我需要10个单词。第三步将返回10个字母,我要10个字,谢谢!它起作用了!非常好的西里尔字母解决方法。谢谢!它起作用了!非常好的西里尔字母解决方法。尝试了,但仍然没有得到预期的结果。尝试了,但仍然没有得到预期的结果。
    
    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();
      } 
    }
    
    Внасяне от осигурителя на осигурителните вноски за държавното обществено осигуряване