我有以下代码:
System.out.printf("Please enter your full name: ");
userFullName = KyBdIn.nextLine();
userFullName= userFullName.trim().replaceAll(" +", " ");
userFullName = userFullName.replaceAll("(?<=\\w)\\w+", ".");
userFullName = userFullName.trim().replaceAll(" +", "");
System.out.println(userFullName);
而我只是想知道它是如何运作的?
\w
是否意味着空格并且?
对它提出疑问?
答案 0 :(得分:3)
方法replaceAll()
有两个参数;第一个是正则表达式(正则表达式)作为其搜索项,第二个是替换表达式(也可能包含某些正则表达式引用,但这里没有使用)。
这一行:
userFullName = userFullName.trim().replaceAll(" +", " ");
调用trim()
,删除前导和尾随“空白”字符,然后调用replaceAll()
将“一个或多个空格”替换为单个空格。
由于此行稍后会重复,因此执行此操作两次不会增加任何值 - 可以删除这两行并影响最终结果。
这一行:
userFullName = userFullName.replaceAll("(?<=\\w)\\w+", ".");
将一个或多个单词字符替换为带有点的单词字符。正则表达式的细分(没有java的反斜杠转义 - 即"\\"
是一个带有单个反斜杠的字符串):
\w
表示“单词字符”,即任何字母,数字或下划线字符\w+
表示“一个或多个单词字符”(加号表示前面一个或多个表达式)(?<=\w)
是一个“后面看”,断言前面的输入是“单词字符”正则表达式(?<=\w)\w+
有效地“除了任何单词的第一个字符”
答案 1 :(得分:0)
.Trim()
删除字符串两端的空格
replaceAll(" +", " ")
用单个空格替换双空格
replaceAll("(?<=\\w)\\w+", ".")
用句点替换内部空格。这个使用'后面'操作。 http://www.regular-expressions.info/lookaround.html
replaceAll(" +", "")
删除所有剩余空格。