有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想建立一个方法,只返回以标点符号结尾的字符串。问题是,当我编译它时,它说它找不到“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) 个答案

  1. # 1 楼答案

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

    考虑^ {CD1>},其中省略号表示您认为是标点符号的所有字符。

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

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

  2. # 2 楼答案

    我会使用正则表达式查找所有以标点符号结尾的单词,并将其返回到列表中。有关正则表达式的更多信息,请单击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;
    }
    

    希望这有帮助