2014-03-19 46 views
2

我正在尝试向我的应用程序添加一些错误消息。为此,我正在使用JOptionPane.showMessageDialog(...);
基本上所有事情都按我的预期工作。但有一点是一点痛苦。我使用e.getMessage()来接收发生错误的描述。分割长错误消息

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

这是工作为好,但:该消息包括这样
Error: "java.net.SocketTimeoutException: Receive timed out".的一部分,当然,在结束了:

Error: "java 
net 
SocketTimeoutException: Receive timed out" 

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

回答

4

为什么不直接劈在每一个有空间点之前?

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

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

+0

不错,那个人有更好的逻辑来解决问题。谢谢! –

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"] 

说明

  • 它分割基于(逃脱)的StringPatterns既不PREC EDED也没有跟任何单词字符
  • 它打印分割Array(在这里,因为包划定点只有1元不匹配Pattern如预期)
+0

就是这样,谢谢!基本上,后视就足够了,因为额外的前视将避免在“正常”句子结尾处的分裂。 –

+0

@JochenReinschlüssel很高兴它帮助:) – Mena

0

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

这是一个在我的工具带中几乎不变的库。

+0

我会看看它,谢谢你的提示! –