我有一个字符串数组
String a = "This is a life and our life will be full of fun just like the Benn Steller's Secret life of Walter Mitty.";
String a1[]=a.split(" ");
for(String temp: a1)
{
System.out.println(temp);
}
这里“生命”重复三次。现在我只需删除一个重复的单词形式数组的频率。
请指导我......
感谢。
答案 0 :(得分:2)
你可以使用这样的东西,但这只会删除指定单词的第一次出现:
删除一个副本的完整代码。你需要知道它不会忽略特殊字符,在这种情况下空格是分隔符。
public static void main(String []args){
String a = "This is a life and our life will be full of fun just like the Benn Steller's Secret life of Walter Mitty Mitty";
System.out.println(removeOneDuplicate(a));
}
public static String removeOneWord(String str, String word){
int value = str.indexOf(word);
String result = str.substring(0, value);
result += str.substring( value+word.length(), str.length());
return result;
}
public static String removeOneDuplicate(String a){
String [] tmp = a.split(" ");
Map<String, Integer> map = new HashMap<String, Integer>();
for(String s: tmp){
if( map.containsKey(s)){
int value = map.get(s);
if(value == 1)
a = removeOneWord(a, s);
map.put(s, value + 1);
}
else
map.put(s, 1);
}
return a;
}
示例结果:
INPUT: This is a life and our life will be full of fun just like the Benn Steller's Secret life of Walter Mitty Mitty
OUTPUT: This is a and our life will be full fun just like the Benn Steller's Secret life of Walter Mitty
结果您可以看到life
,of
和Mitty
已被删除。
修改强>
如果你想删除所有重复项并在第一行后面出现单词更改:
int value = str.indexOf(word);
- &gt; int value = str.lastIndexOf(word);
int value = map.get(s);
if(value == 1)
a = removeOneWord(a, s);
map.put(s, value + 1);
为:
a = removeOneWord(a, s);
答案 1 :(得分:0)
首先,您提供的示例不是String数组。它是一个字符串。
我正在提供基于String的解决方案。如果您需要String数组,如果您理解这一点,则可以自己完成。
首先,让我们拿一个字符串标记器。标记生成器按给定的字符集拆分字符串。在最简单的形式中,它通过空间分解字符串。 例如,字符串str =“这是一个测试”。一个简单的标记化器会将这个字符串分解为“This”“is”“a”“test”等字样。
以下是声明和使用tokenizer的代码:
StringTokenizer st = new StringTokenizer(a); // a is given your string
现在,我们在下面声明一个字符串数组。 (字符串数组是一个数组,每个数组的元素都是一个字符串。)
String[] str_arr = new String[100];
我们现在将使用tokenizer来获取字符串中的每个单词,并将每个单词保留在字符串数组中,如下所示:
int index=0; // to keep track of index of the array (of strings)
while (st.hasMoreElements()) {
str_arr[index] = (String) st.nextElement();
index++;
}
所以,现在我们有一个名为'str_arr'的字符串数组。现在我们将检查数组的每个元素是否发生重复值。如果我们发现重复,我们将用空值替换它。但是,我们只会这样做一次。其余的副本将保持不变,这就是你要求的,对吧?
要跟踪已经搜索过的字符串并使其为null,我们将使用这样的HashMap。
HashMap<String, Integer> hash_map = new HashMap<String, Integer>();
现在,我们将运行2个嵌套循环,之后,我们将有一个修改过的数组,其中只有多次出现的字符串减少了1。
for(int i=0; i<index; i++){
String current_string = str_arr[i];
for(int j=i+1; j<index; j++){
if( (current_string.equals(str_arr[j])) && (hash_map.containsKey(current_string)==false) && str_arr[j]!=""){
hash_map.put(str_arr[j], 1);
str_arr[j]="";
break;
}
}
}
现在,您可以打印所有单词,如下所示:
for(int i=0; i<index; i++)
System.out.print(str_arr[i]+" ");
INPUT: This is a life and our life will be full of fun just like the Benn Steller's Secret life of Walter Mitty.
OUTPUT: This is a life and our will be full of fun just like the Benn Steller's Secret life Walter Mitty.
很抱歉很长的解释,但如果你不能得到任何意见,请发表评论。我会尽力回复。 谢谢! 快乐编码:)
答案 2 :(得分:0)
众所周知,set根本不包含重复。
我的代码:
String a = "This is a life and our life will be full of fun just like the Benn Steller's Secret life of Walter Mitty.";
String[] aSpilt = a.split(" ");
List<String> list = Arrays.asList(aSpilt);
System.out.print("The input is : ");
list.forEach((s) -> System.out.print(s + " "));
System.out.println();
Set<String> noDuplicateSet = new LinkedHashSet<>();
Set<String> duplicateSet = new LinkedHashSet<>();
list.forEach((i) -> {
if (!noDuplicateSet.add(i) && i.equals("life")) {
duplicateSet.add(i + " ");
}
});
System.out.print("The output is : ");
noDuplicateSet.forEach((s) -> System.out.print(s + " "));
System.out.println("");
duplicateSet.forEach((s) -> System.out.print(s + " "));
我的输出:
The input is : This is a life and our life will be full of fun just like the Benn Steller's Secret life of Walter Mitty.
The output is : This is a life and our will be full of fun just like the Benn Steller's Secret Walter Mitty
注意:
我保留了第一次生命并移除了剩下的部分,而且我遇到了不止一次,因为这个问题只是为了保住第一次生命而去掉其余部分。
我使用lambda表达式来遍历集合
来源:
答案 3 :(得分:0)
public static void main(String args[])
{
String s;
Scanner in=new Scanner(System.in);
s=in.nextLine();
String ch[]=s.split(" ");
String m=in.nextLine();
for(int i=;i<ch.length;i++)
{
if(ch[i].matches(m))
ch[i]="";
S.o.p(ch[i]);
}
}