如何在 StringTokenizer (JAVA) 中使用单词溢出句子
How to spilt a sentence using words in StringTokenizer (JAVA)
我有一个句子,其中作者的名字由单词 "and" 分隔。我想删除 "and" 并用 & 代替。有没有一种快速简便的方法可以做到这一点。我试过扫描仪和 useDelimiter()、StringTokenizer 和拆分。
例如,这是我要拆分的内容(我从计算机上的文件中获取此信息):
author={J. Park and J. N. James and Q. Li and Y. Xu and W. Huang},
所以我用了:
String author = nextLine.substring(nextLine.indexOf("{") + 1, nextLine.lastIndexOf("}"));
StringTokenizer st2 = new StringTokenizer(author, " and ");
while(st2.hasMoreTokens()){
author += st2.nextToken() + " & ";
}
我得到的输出如下:
J. Park and J. N. James and Q. Li and Y. Xu and W. HuangJ. & P & rk & J. & N. & J & mes & Q. & Li & Y. & Xu & W. & Hu & g & .
我不完全确定我做错了什么。我昨晚在谷歌上搜索了 2 个小时才放弃。我试过使用“[and]”、"and"、“^[and]$”,但没有成功。
如果您只想将 "and" 替换为“&”,您只需调用字符串上的 relaceAll()
方法即可。
试试这个。
public class Test{
public static void main(String []args){
String author= "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
System.out.println(author);
author = author.replaceAll("\band\b", "&");
System.out.println(author);
}
}
为了完整起见,另一种方法是 replaceAll()
String author="{J. Park and J. N. James and Q. Li and Y. Xu and W. Huang}";
author = author.replaceAll( " and ", " & " );
会得到相同的结果。注意 " and "
周围的空格。这些可以防止您用 "Rosal&" 替换 "Rosaland" 这样的词。 " & "
周围的空格是为了保持与以前相同的间距。没有他们你会得到 "J. Park&J. N. James"
.
仅供参考:"\b"
是程序员的工具。它使用的 "word boundary" 包括典型的 "programmer words"。快速检查表明它匹配任何不是 [A-Za-z0-9_] 的名称,因此如果您有一个像 "Johhan Fu-and-leson" 这样的名称,它将匹配“-”并替换它。不太可能发生,但要记住一些事情。
此外,像 "Lindy Harlaown_and Fate" 这样的字符串 _ 将不匹配,并且不会发生替换。再次提醒一下。
正则表达式并不神奇,也不会读懂你的想法,它的默认匹配可能不适合你的特定需求。
使用replaceAll
方法。例如:
String s = "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
s = s.replaceAll("\band\b", "&"); // "J. Park & J. N. James & Q. Li & Y. Xu & W. Huang"
\b
字边界确保如果名称包含 and
(例如,"Band"),则不会被触及。
我有一个句子,其中作者的名字由单词 "and" 分隔。我想删除 "and" 并用 & 代替。有没有一种快速简便的方法可以做到这一点。我试过扫描仪和 useDelimiter()、StringTokenizer 和拆分。
例如,这是我要拆分的内容(我从计算机上的文件中获取此信息):
author={J. Park and J. N. James and Q. Li and Y. Xu and W. Huang},
所以我用了:
String author = nextLine.substring(nextLine.indexOf("{") + 1, nextLine.lastIndexOf("}"));
StringTokenizer st2 = new StringTokenizer(author, " and ");
while(st2.hasMoreTokens()){
author += st2.nextToken() + " & ";
}
我得到的输出如下:
J. Park and J. N. James and Q. Li and Y. Xu and W. HuangJ. & P & rk & J. & N. & J & mes & Q. & Li & Y. & Xu & W. & Hu & g & .
我不完全确定我做错了什么。我昨晚在谷歌上搜索了 2 个小时才放弃。我试过使用“[and]”、"and"、“^[and]$”,但没有成功。
如果您只想将 "and" 替换为“&”,您只需调用字符串上的 relaceAll()
方法即可。
试试这个。
public class Test{
public static void main(String []args){
String author= "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
System.out.println(author);
author = author.replaceAll("\band\b", "&");
System.out.println(author);
}
}
为了完整起见,另一种方法是 replaceAll()
String author="{J. Park and J. N. James and Q. Li and Y. Xu and W. Huang}";
author = author.replaceAll( " and ", " & " );
会得到相同的结果。注意 " and "
周围的空格。这些可以防止您用 "Rosal&" 替换 "Rosaland" 这样的词。 " & "
周围的空格是为了保持与以前相同的间距。没有他们你会得到 "J. Park&J. N. James"
.
仅供参考:"\b"
是程序员的工具。它使用的 "word boundary" 包括典型的 "programmer words"。快速检查表明它匹配任何不是 [A-Za-z0-9_] 的名称,因此如果您有一个像 "Johhan Fu-and-leson" 这样的名称,它将匹配“-”并替换它。不太可能发生,但要记住一些事情。
此外,像 "Lindy Harlaown_and Fate" 这样的字符串 _ 将不匹配,并且不会发生替换。再次提醒一下。
正则表达式并不神奇,也不会读懂你的想法,它的默认匹配可能不适合你的特定需求。
使用replaceAll
方法。例如:
String s = "J. Park and J. N. James and Q. Li and Y. Xu and W. Huang";
s = s.replaceAll("\band\b", "&"); // "J. Park & J. N. James & Q. Li & Y. Xu & W. Huang"
\b
字边界确保如果名称包含 and
(例如,"Band"),则不会被触及。