gpt4 book ai didi

java - 小心 : Splitting a string by newlines can cause bothering bugs

转载 作者:行者123 更新时间:2023-11-29 04:20:37 26 4
gpt4 key购买 nike

用换行符分割字符串会导致麻烦的错误。请看我的回答。

原始问题 - 由于无法在日志中看到不可见字符而导致的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com