Java几乎像HTML渲染器一样减少空白

Java几乎像HTML渲染器一样减少空白,java,regex,Java,Regex,我一直在尝试用正则表达式来实现这一点,但我一直在失败,所以也许有经验的人可以帮助我 如何使字符串的呈现方式接近任何webbrowser呈现html字符串的方式? HTML示例: 赫尔 瞧 怎样 你是吗 呈现为: Hel lo how are you 我希望是这样 Hello how are you 因此,与html的区别在于,没有显式空格的换行符只是被删除了。在java中,此字符串如下所示: \tHel\nlo \n how\n are you 我当前的解决方案: // rem

我一直在尝试用正则表达式来实现这一点,但我一直在失败,所以也许有经验的人可以帮助我

如何使字符串的呈现方式接近任何webbrowser呈现html字符串的方式? HTML示例:


赫尔
瞧
怎样
你是吗
呈现为:

Hel lo how are you
我希望是这样

Hello how are you
因此,与html的区别在于,没有显式空格的换行符只是被删除了。在java中,此字符串如下所示:

\tHel\nlo \n  how\n are    you
我当前的解决方案:

// remove linebreaks and tabs and any leading or trailing whitespace
// this is necessary to avoid converting \t or \n to a space
script = script.replaceAll("\\s+\n\\s+", "");
script = script.replaceAll("\\s+\t\\s+", "");
// remove any length of whitespace and replace it with one
script = script.replaceAll("\\s+", " ");
// rewmove leading and trailing whitespaces
script = script.trim();
只有一个问题: 如果有一行尾随空格后跟换行符和更多文本,则尾随空格将被删除:

Hello \nhow are you?
将减少到

Hellohow are you
因此,使用下划线(41;作为空格标记时,以下内容应为真:

_ = _
__ = _
\t\n_ = _
_\t\n = _
\t_\n = _
_\t_\n_ = _
\n = // nothing
\t = // nothing
\t\n = // nothing

我需要使用什么样的replaceAll(regex,string)组合?

regex
\s
匹配所有空格。因此,我相信您只需要
myString.trim().replaceAll(“\\s+”,”)

正则表达式
\s
匹配所有空格。因此,我相信您只需要
myString.trim().replaceAll(“\\s+”,”)

我认为-根据您当前的示例-您希望将替换函数更改为:

//删除任何换行符或制表符(前导或尾随空格无关紧要)
script=script.replaceAll(“\\\t \\\n)”,“”);
//将剩余的空格缩减为一个空格
script=script.replaceAll(“\\s+”,“”);
script=script.trim();
这当然会导致类似的情况

你好\n你好吗?
降为

你好吗?

但这是您的需求所固有的结果。

鉴于您当前的示例,我认为您希望将替换功能更改为:

//删除任何换行符或制表符(前导或尾随空格无关紧要)
script=script.replaceAll(“\\\t \\\n)”,“”);
//将剩余的空格缩减为一个空格
script=script.replaceAll(“\\s+”,“”);
script=script.trim();
这当然会导致类似的情况

你好\n你好吗?
降为

你好吗?

但这是您的需求所固有的结果。

您正在寻找regex.replaceAll(“+”,”)的可能副本。到目前为止,您尝试了什么,出现了什么问题。我想你是自己发现了明显的正则表达式?!我已经完全修改了这个问题,包括我当前的解决方案。您正在寻找regex。可能与.replaceAll(“+”,“”)重复。到目前为止,您尝试了什么,出现了什么问题。我想你是自己发现了明显的正则表达式?!我已经完全修改了这个问题,包括我目前的解决方案,这不会留下一个领先的空间吗?是的,你可以先做
myString.trim()
。我已经试过了。我更新了我的问题,解释了为什么这还不够。我需要明确区分空格和制表符/换行符。我明天会看一个新的解决方案,但同时,你能告诉我为什么你认为trim会改变
嗨\n这里
到现在
?如果是同一个字符串,则中间的空格不被视为尾随…抱歉,已更新注释。当然,它不是“修剪”的,但我当前的正则表达式替换正在以一种不必要的方式减少它。这不会留下一个前导空间吗?是的,你可以先做
myString.trim()
。我已经试过了。我更新了我的问题,解释了为什么这还不够。我需要明确区分空格和制表符/换行符。我明天会看一个新的解决方案,但同时,你能告诉我为什么你认为trim会改变
嗨\n这里
到现在
?如果是同一个字符串,则中间的空格不被视为尾随…抱歉,已更新注释。当然,它并没有被“修剪”,但我目前的正则表达式替换正在以一种不必要的方式减少它。