Java几乎像HTML渲染器一样减少空白
我一直在尝试用正则表达式来实现这一点,但我一直在失败,所以也许有经验的人可以帮助我 如何使字符串的呈现方式接近任何webbrowser呈现html字符串的方式? 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
赫尔
瞧
怎样
你是吗
呈现为:
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这里
到现在
?如果是同一个字符串,则中间的空格不被视为尾随…抱歉,已更新注释。当然,它并没有被“修剪”,但我目前的正则表达式替换正在以一种不必要的方式减少它。