如何在 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"),则不会被触及。