如何仅返回以标点符号结尾的字符串?

时间:2019-02-12 20:45:05

标签: java arrays methods

我想构建一个方法,该方法仅返回以标点符号结尾的字符串。问题是,当我编译它时说它找不到“ i”,那么我该怎么办?

public static String ktheFjalite(String[] s){
    int nrFjaleve = 0;
    int nrZanoreve = 0;
    for (int j = 0; j <s.length; j++){
            if (s[j].charAt(j) == ' '){
                nrFjaleve++;
            }
        }
    for (int k = 0; k < s.length; k++){
            if (s[k].contains("a")||s[k].contains("e")||s[k].contains("i")||s[k].contains("o")||s[k].contains("u")||s[k].contains("y")){
                nrZanoreve++;
            }
        }

    if(s[i].endsWith(".")||s[i].endsWith("!")||s[i].endsWith("?")||s[i].endsWith("...")){
        if(nrFjaleve<=6){
            if(nrZanoreve<=8) {
                return (Arrays.toString(s));
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

不使用正则表达式或模式的另一种方法:

考虑String marks = "...";,其中的省略号代表您认为是标点符号的所有字符。

然后请注意,String的最后一个字符是c = s.charAt(s.length() - 1); //Minus one or OutOfBoundsException

如果字符串的最后一个字符是标点符号,那么marks.contains(c)将为true。

答案 1 :(得分:0)

我将使用正则表达式查找所有以标点符号结尾的单词,并将其返回到列表中。有关正则表达式的更多信息,请单击here

private static List<String> findPunctuation(String sentence) {
    List<String> neededWords = new ArrayList<String>();
    String[] words = sentence.split(" ");

    for (String word : words)
        if (word.matches(".*[\\?!\\.]")) 
            neededWords.add(word);

    return neededWords;
}

对于您来说,这可能不是一个完美的解决方案,但它应该为您提供一些指导。

编辑

如果只想返回x个单词,则可以使用以下方法实现:

private static String findPunctuation(String sentence) {

    Pattern p = Pattern.compile("(?:.* ){6,8}(.*[\\?!\\.])$");
    Matcher m = p.matcher(sentence);

    while(m.find())
        return m.group(1);

    return null;
}

希望这会有所帮助。