gpt4 book ai didi

java - Java 中的替换单词

转载 作者:行者123 更新时间:2023-11-30 03:10:45 26 4
gpt4 key购买 nike

有一些行,例如“1 qqq 4 aaa 2”和列表{aaa,qqq}。我必须更改列表中单词的所有单词(仅由字母组成)。在此示例中回答“1 aaa 4 qqq 2”。尝试一下

StringTokenizer tokenizer = new StringTokenizer(str, " ");
while (tokenizer.hasMoreTokens()){
tmp = tokenizer.nextToken();
if(tmp.matches("^[a-z]+$"))
newStr = newStr.replaceFirst(tmp, words.get(l++));
}

但是它不起作用。结果我有同样的行。

我的所有代码:

String space = " ", tmp, newStr;
Scanner stdin = new Scanner(System.in);
while (stdin.hasNextLine()) {
int k = 0, j = 0, l = 0;
String str = stdin.nextLine();
newStr = str;
List<String> words = new ArrayList<>(Arrays.asList(str.split(" ")));
words.removeIf(new Predicate<String>() {
@Override
public boolean test(String s) {
return !s.matches("^[a-z]+$");
}
});
Collections.sort(words);
StringTokenizer tokenizer = new StringTokenizer(str, " ");
while (tokenizer.hasMoreTokens()){
tmp = tokenizer.nextToken();
if(tmp.matches("^[a-z]+$"))
newStr = newStr.replaceFirst(tmp, words.get(l++));
}
System.out.printf(newStr);
}

最佳答案

我认为问题可能是 replaceFirst() 需要正则表达式作为第一个参数,而您给它一个字符串。

也许可以尝试一下

newStr = newStr.replaceFirst("^[a-z]+$", words.get(l++));

相反?

更新:

这对您来说有可能吗:

    StringBuilder _b = new StringBuilder();     
while (_tokenizer.hasMoreTokens()){
String _tmp = _tokenizer.nextToken();
if(_tmp.matches("^[a-z]+$")){
_b.append(words.get(l++));
}
else{
_b.append(_tmp);
}
_b.append(" ");
}
String newStr = _b.toString().trim();

更新2:

像这样更改 StringTokenizer:

StringTokenizer tokenizer = new StringTokenizer(str, " ", true);

这还将返回分隔符(所有空格)。

然后像这样连接字符串:

    StringBuilder _b = new StringBuilder();     
while (_tokenizer.hasMoreTokens()){
String _tmp = _tokenizer.nextToken();
if(_tmp.matches("^[a-z]+$")){
_b.append(words.get(l++));
}
else{
_b.append(_tmp);
}
}
String newStr = _b.toString().trim();

这应该有效。

更新3:

正如 @DavidConrad 提到的 StrinkTokenizer 不应再使用。这是另一个使用 String.split() 的解决方案:

final String[] _elements = str.split("(?=[\\s]+)");

int l = 0;
for (int i = 0; i < _tokenizer.length; i++){
if(_tokenizer[i].matches("^[a-z]+$")){
_b.append(_arr[l++]);
}
else{
_b.append(_tokenizer[i]);
}
}

关于java - Java 中的替换单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682265/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com