我想构建一个方法,该方法仅返回以标点符号结尾的字符串。问题是,当我编译它时说它找不到“ 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));
}
}
}
}
答案 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;
}
希望这会有所帮助。