我目前正在尝试为我的应用添加一些错误消息。为此,我使用JOptionPane.showMessageDialog(...);
基本上一切都按照我的预期运作。但有一点是有点痛苦。
我正在使用e.getMessage()
来接收发生错误的描述。
在sql连接错误的情况下,这是一个很长的消息,它不可能适合屏幕。所以我要在每句话之后使用split([\\.])
分割它。
这也有效,但是:消息中包含了这样的部分
Error: "java.net.SocketTimeoutException: Receive timed out".
,当然最终会:
Error: "java
net
SocketTimeoutException: Receive timed out"
我怎么能避免这种行为?或者是否有更好的方法来实现分割错误消息的结果?
答案 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
包含了大量有用的东西,可能会在你的项目中派上用场。
它是我的工具带中几乎不变的库之一。