我现在快速执行了一个递归函数,该函数将迭代throwable和throwable.getCause()。
这是因为每个“ throwable.getCause()”都会向您返回一条新的异常消息,其中包含重复的行和换行。所以这个概念是:如果在主throwable上有一个“ cause”行,所以有一行“ n more ..”,所以我得到了“ n more ..”之前的最后一行,然后得到了原因消息,最后,我将原因消息细分为仅得到最后重复的行之后的部分(出现在最后一行的最后一行):main throwable和cause throwable。
然后,当我得到原因消息时,我使用递归,因此重新调用同一函数从主throwable中获取原因消息,我将得到一个已经被替换的消息。如果从主要可抛出对象引发的原因也有另一个原因,那么主要可引发对象具有3个级别(主要->原因->原因),在主要可引发对象上,我将获得具有“原因消息”的已替换消息(使用相同的主
publicstaticStringprintStackTraceString(T ex){// RecursiveThrowabletr=ex;if(tr!=null){Stringst=Log.getStackTraceString(tr);if(tr.getCause()!=null){// Recursion...Stringcs=printStackTraceString(tr.getCause());Stringr1=st.subSequence(0x0,st.lastIndexOf("\n",st.lastIndexOf("\n")-"\n".length())).toString();Stringreplace=r1.substring(r1.lastIndexOf("\n"));if(cs.contains(replace)){returnr1.concat(cs.subSequence(cs.indexOf(replace)+replace.length(),cs.length()).toString());}}returnst;}return"";}
我只用2级(主要->原因)尝试了它,而没有更多:/如果有什么问题,请编辑函数并写评论:D
也有一个不错的编码和美好的一天:D
重要:
如果“ st”不包含“ \ n”或类似字符,则此代码有时会引发异常(我发现某些堆栈跟踪异常存在此问题)。为了解决这个问题,您需要在代码行之前添加一些检查:“ String r1 = ...”
您需要检查:“ st”包含“ \ n”,并且“ st.subSequence”的开始和结束索引均有效。
无论如何,我建议将其放入try-catch并在出现异常的情况下返回空字符串。(它是递归的,因此返回的空字符串将被连接到先前处理的字符串)。