例如:
你给了一个单词和Set
个字母。如果单词包含不在Set
范围内的字母,则这些字母将用短划线“替换”。您实际上并不应该更改给定的单词,而是创建一个反映这些更改的新String
。
说你有一个词:“magikarp”。 Set
包含字母'm','k','p'。你将返回的字符串是“m --- k - p”。
如何仅使用String
和String
方法来实现这一目标?我也不能使用任何外部库。
使用数组对我来说更直观,但这必须通过构建String
来执行,而不是为了提高效率而构建任何额外的数据结构。
这是我接触它的方式(工作解决方案,但没有通过建立String
来完成),以进一步澄清:
public String getPattern (SortedSet<Character> guesses, String word) {
char[] pattern = word.toCharArray();
for (int i = 0; i < wordLength; i++) {
if (!guesses.contains(pattern[i])) {
pattern[i] = '-';
}
}
// Pads each character in the generated String with spaces and trims
// the leading and trailing spaces.
return new String(pattern).replace("", "").trim();
}
}
答案 0 :(得分:3)
你可以使用String已经提供的东西,一个获取每个字符的方法和一个用另一个字符替换特定字符的方法:
public String getPattern (Set<Character> guesses, String word) {
for (int i=0; i<word.length(); ++i) {
char c = word.charAt(i);
if (!guesses.contains(c))
word = word.replace(c, '-');
}
return word;
}
它效率不高,因为它会为每个需要替换的字符创建一个新的字符串实例。为了提高效率,使用StringBuilder会更好。
答案 1 :(得分:2)
如何从字符集构建正则表达式字符串,并将其用作String.replaceAll方法的参数以返回已过滤的字符串?
Set<Character> letters = new HashSet<>();
letters.add('m');
letters.add('k');
letters.add('p');
String filter = "[^(";
for (Character letter : letters) {
filter += letter;
}
filter += ")]";
String toBeReplaced = "magikarp";
String result = toBeReplaced.replaceAll(filter, "-");
答案 2 :(得分:1)
这肯定不是解决问题的最佳方法,除了它&#34;建立字符串&#34;。
String newWord = "";
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
newWord = newWord + (
guesses.contains(c) ? c : '-'
);
}
此方法在每个字母上创建一个新的String
实例,而不是快速替换。但它会建立起来&#34;。