拆分长错误消息

时间:2014-03-19 13:17:32

标签: java regex split

我目前正在尝试为我的应用添加一些错误消息。为此,我使用JOptionPane.showMessageDialog(...);
基本上一切都按照我的预期运作。但有一点是有点痛苦。 我正在使用e.getMessage()来接收发生错误的描述。

在sql连接错误的情况下,这是一个很长的消息,它不可能适合屏幕。所以我要在每句话之后使用split([\\.])分割它。

这也有效,但是:消息中包含了这样的部分 Error: "java.net.SocketTimeoutException: Receive timed out".,当然最终会:

Error: "java
net
SocketTimeoutException: Receive timed out"

我怎么能避免这种行为?或者是否有更好的方法来实现分割错误消息的结果?

3 个答案:

答案 0 :(得分:4)

为什么不拆分每个前面有点的空间呢?

尝试split("(?<=[.])\\s+")

(?<=[.])positive-look-behind。它用于确保空格\\s+组之前有点,但不会在匹配中包含此点,因此在拆分后它将保持不变,而白色空格将被删除。

答案 1 :(得分:2)

在输入和预期结果完整发布之前不确定,但您可以使用“lookarounds”来实现此目的。

例如:

String input = "Error: \"java.net.SocketTimeoutException: Receive timed out\".";
System.out.println(Arrays.toString(input.split("(?<!\\w)\\.(?!\\w)")));

<强>输出

[Error: "java.net.SocketTimeoutException: Receive timed out"]

<强>解释

  • 它基于(转义)点String分割Patterns,不会先于或后跟任何单词字符
  • 打印分割Array(此处只有1个元素,因为包分隔点与预期的Pattern不匹配)

答案 2 :(得分:0)

使用正则表达式的替代方法是使用apache.commons.lang包中的WordUtils.wrap。使用正则表达式的优点是不使用额外的库,但使代码更难以理解。在你的情况下,这不是一个大问题,但作为一个额外的好处,commons.lang包含了大量有用的东西,可能会在你的项目中派上用场。

它是我的工具带中几乎不变的库之一。