作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
用换行符分割字符串会导致麻烦的错误。请看我的回答。
原始问题 - 由于无法在日志中看到不可见字符而导致的 XY 问题。
public void DoCommand(String cmd)
{
String [] words=cmd.split(" ");
if (words == null)
{
Log.e(TAG, "Words null");
return;
}
if (words.length == 0)
{
Log.e(TAG, "Words short");
return;
}
String program=words[0].toLowerCase();
Method method=commandmap.get(program);
try
{
method.invoke(cmdimpl, (Object) words);
} catch (IllegalAccessException |
IllegalArgumentException |
InvocationTargetException e)
{
Log.e(TAG, "invocation error", e);
sender.SendError(e);
}
catch (NullPointerException e)
{
Log.e(TAG, "UNknown cmd", e);
sender.SendError("unknown command "+program);
}
...
}
这是 cmdimpl 中方法的示例。
public void DoHelp(String []args) throws IOException
{
session.sender.Send(typeConverter.GetBatchInfo("",TypeConverter.FILETYPE.TEXTMSG, WorkerSession.commandmap.keySet().toString()));
}
因此,当我调用 DoCommand("help")
时,它显示“未知命令”。但是当我调用 DoCommand("help a")
时它工作正常。
对解决这个问题有什么怀疑/建议吗?
编辑
我添加了一些代码来打印堆栈跟踪,但它不起作用。
catch (NullPointerException e)
{
Log.e(TAG, "UNknown cmd"+program+".", e);
sender.SendError("unknown command "+program+"-"+Log.getStackTraceString(e));
}
sender.SendError
说
"unknown command help"
,不是
unknown command help-java.lang.NullPointerException: ...
看来是程序
出了问题。
编辑 2
我突然想到一个想法,CR LF/CR/LF
issue 可以是一个关键点。
public void ExecuteCommands(String cmds)
{
workerThread.AddCommand(cmds.split("\n")); //this \n may be wrong?!
}
最佳答案
它将返回一个包含一个元素的 String[],即原始字符串。
您可以通过以下方式测试它:
String word="Hello";
String [] words=word.split(" ");
if (words == null) {
System.out.print("NULL");
} else {
System.out.println(words.length);
System.out.println(words[0]);
}
关于java - 小心 : Splitting a string by newlines can cause bothering bugs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49466831/
我是一名优秀的程序员,十分优秀!