java - 来自 coderbyte 的无效结果
问题描述
参考下面的测试,有些测试用例实际上是失败的,即使输出是正确的。任何人都可以建议吗?
https://coderbyte.com/editor/Longest%20Word:Java
最长单词 让函数 LongestWord(sen) 接受传递的 sen 参数并返回字符串中的最大单词。如果有两个或多个长度相同的单词,则返回字符串中具有该长度的第一个单词。忽略标点符号并假设 sen 不会为空。 例子
输入:“fun&!! 时间”
输出:时间
输入:“我爱狗”
输出:爱
以下是无效的失败测试用例
对于输入“一个美丽的句子^&!” 输出不正确。正确的输出很漂亮
对于输入“oxford press”,输出不正确。正确的输出是牛津
对于输入“123456789 98765432”,输出不正确。正确的输出是 123456789
对于输入“abc dee”,输出不正确。正确的输出是 dee
对于输入“一个令人困惑的 /:sentence:/[ 这不是!!!!!!!~”输出不正确。正确的输出令人困惑
该程序
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Main {
public static final String REG_EXP_CHAR_ONLY = "(?=.*?[a-zA-Z0-9 ])";
public static String LongestWord(String sen) {
StringBuffer strBuffer = new StringBuffer();
for (String c : sen.split("")) {
//System.out.println("c--------->" + c);
if (isValid(c)) {
strBuffer.append(c);
}
}
//System.out.println(strBuffer.toString());
String longest = Arrays.stream(strBuffer.toString().split(" ")).max(Comparator.comparingInt(String::length))
.orElse(null);
return longest;
}
public static boolean isValid(String c) {
// System.out.println("char -->" + c);
Pattern pattern = Pattern.compile(REG_EXP_CHAR_ONLY);
Matcher matcher = pattern.matcher(c);
boolean matchFound = matcher.find();
if (matchFound) {
// System.out.println("Match found");
return true;
}
return false;
}
public static void main (String[] args) {
// keep this function call here
Scanner s = new Scanner(System.in);
System.out.print(LongestWord(s.nextLine()));
}
}
解决方案
看来这是 coderbyte 的问题。我复制了你的代码并提交了。然后就过去了。
==================================================== ================
编辑:也许您应该改用“StringBuilder”(而不是StringBuffer)。我刚刚修复了 ide 中的所有警告,然后所有测试都通过了。
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Main {
public static final String REG_EXP_CHAR_ONLY = "(?=.*?[a-zA-Z0-9 ])";
public static String LongestWord(String sen) {
StringBuilder strBuffer = new StringBuilder();
for (String c : sen.split("")) {
//System.out.println("c--------->" + c);
if (isValid(c)) {
strBuffer.append(c);
}
}
return Arrays.stream(strBuffer.toString().split(" ")).max(Comparator.comparingInt(String::length))
.orElse(null);
}
public static boolean isValid(String c) {
// System.out.println("char -->" + c);
Pattern pattern = Pattern.compile(REG_EXP_CHAR_ONLY);
Matcher matcher = pattern.matcher(c);
// System.out.println("Match found");
return matcher.find();
}
public static void main (String[] args) {
// keep this function call here
Scanner s = new Scanner(System.in);
System.out.print(LongestWord(s.nextLine()));
}
}
推荐阅读
- tensorflow - TensorFlow MultiRNNCell 保存和恢复
- python - RDS:无法获取在 boto3 describe_events 中显示为空白的事件
- php - Laravel 5.6 spatie/laravel-sitemap 生成默认xml行且无路由
- python - 如果我的包在 2.x 上,我可以发布 1.x 更新吗?(皮皮)
- node.js - NodeJS Stream 通过 async/await 错误返回
- javascript - Javascript 获取字符串出现次数
- java - 无法导入assertThat方法junit
- reactjs - Electron 应用程序启动时间过长
- python-3.x - Python TF 对象检测!找不到对象检测
- selenium - 什么是 。(点)在xpath中的属性位置?