删除字符串数组中的重复字符串
我正在基于Java中的字符串处理制作一个程序,我需要从字符串数组中删除重复的字符串。 在此程序中,所有字符串的大小都相同。
作为字符串数组的’array’包含许多字符串,其中两个字符串彼此相似。 因此,使用下面的代码,必须删除重复的字符串,但不会删除它。
如何删除重复的字符串?
我使用以下代码。
for(int s=0;s<array.length-1;s++) { for(int m=0;m<array.length;m++) { for(int n=0;n<array[m].length();n++) { if(array[s].charAt(n)==array[m].charAt(n)) { continue; } else break; } if(n==array[m].length()) { ArrayUtils.removeElement(array, array[s]); } }
这会奏效
array = new HashSet(Arrays.asList(array)).toArray(new String[0]);
或者只使用HashSet
而不是数组。
除非这是[homework]
否则我会使用Set
String[] array = Set uniqueWords = new HashSet (Arrays.asList(array));
Set set = new HashSet (); Collections.addAll(set, array);
或者从…开始
for(int s=0;s
import java.util.*; public class Stringarray { public static void main(String args[]){ String[] name = {"aim","rajesh","raju","aim"}; Set myset = new HashSet (); Collections.addAll(myset,name); System.out.println(myset); } }
- 为什么不使用
String.equals()
进行比较而不是手动迭代字符串中的字符? - 你的逻辑实际上是有缺陷的:对于
array[s]
=="12345"
和array[m]
=="123"
它会声称它们是相等的 - 而且,在你的内部循环
for(int m=0;m
m
在某些时候也会变得等于s
,所以你要将一个字符串与它自己进行比较
这些注释假设您需要使用自己的代码实现删除逻辑,而不允许使用类库。 如果不是这样,正如其他人所指出的那样,使用HashSet
是最简单的方法。
为什么不删除最内部循环而不支持String.equals(String)
?
在第一次迭代中,您将比较array [0]与数组[0]相等,并将其删除。 然后,您将原始数组[1]与数组中的所有其他元素进行比较,如果它们相等,则删除数组[1](而不是另一个)。
有一些问题,如果有一些重复的字符串,你要删除第一个,这将减少数组的大小而不减少r
所以,数组中的一些字符串被跳过。
我会使用强制唯一性的数据结构,例如Set。
如果你的数组中有3个相等的字符串会发生什么,我不确定会发生什么。
我相信你会遇到一些ArrayIndexOutOfBoundsException
。
我认为最后的if条件应该是if(n ==(array [m] .length() – 1))
话虽如此,您似乎正在尝试实现String.equals()方法在内部循环中所执行的操作。
String[] arr = {"w10","w20","w10","w30","w20","w40","w50","w50"}; List arrList = new ArrayList (); int cnt= 0; //List arrList = Arrays.asList(arr); List lenList = new ArrayList (); for(int i=0;i
建议的解决方案不保持元素的顺序。 如果您使用Java 8或更高版本并希望维护订单,则可以按如下方式使用流:
array = Arrays.stream(array).distinct().toArray(String[]::new);
完整示例: https : //www.javacodeexamples.com/java-string-array-remove-duplicates-example/849
重复整数删除:这是完美的答案///哈里斯///
public static void duplicateRemove(int[] arr) { int temp = 0; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length; j++) { if (arr[i] < arr[j]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } int count; for (int j = 0; j < arr.length;) { count = 1; for (int i = j + 1; i < arr.length; i++) { if (arr[i] == arr[j]) { count++; } else break; } System.out.println(arr[j] + " is : " + count); j += count; } }