所以我有一个包含这些行的文件
155, 490, 297, 490,
-45, 19, 45, 19,
-24, 80,-12,-69, 80,
12,-92, 28,-40,
我尝试读取文件并找到包含重复元素的这些行。但是我的逻辑错误,我找不到错误。有什么帮助吗?
以下是代码:
public static void main(String[] args) throws IOException {
Scanner fileInput = null;
try {
fileInput = new Scanner( new File("array_list.csv"));
String line;
while (fileInput.hasNextLine()) {
line = fileInput.nextLine();
String[] lineArr = line.split(",");
// check for missing values
boolean contains = true;
for(int i=0; i<lineArr.length; i++) {
for(int j=0; j<lineArr.length; j++) {
if(lineArr[i]==lineArr[j]) {
contains = false;
break;
}
}
if(!contains) {
// print the row .....
}
else {
contains = true;
// print some thing ...
}
}
}
} finally {
if (null != fileInput) {
fileInput.close();
}
}
}
答案 0 :(得分:3)
由于您要比较字符串,因此需要使用equals()
方法:
lineArr[i].equals(lineArr[j])
话虽如此,我还可以看到一些其他可能导致问题的事情:
lineArr[i].trim()
以消除前导/尾随空格。contains
设置为false并尝试找到匹配项,然后将其设置为true并中断。然后if (contains)
,打印行。答案 1 :(得分:1)
立即突出的问题是你正在使用Strings,而你正在使用“==”运算符来比较这一行的字符串:
if(lineArr[i]==lineArr[j]) {
这应该是:
if(lineArr[i].equals(lineArr[j])) {
答案 2 :(得分:1)
尝试将代码替换为
if(lineArr[i].equals(lineArr[j]))
代替
if(lineArr[i]==lineArr[j])
equals()
方法使用基础Strings
表示法比较Unicode
的实际内容,而==
使用address
仅比较对象的标识1}}在记忆中。
答案 3 :(得分:1)
将所有值放入集合中并检查其长度是否等于原始数组。如果是这样,那么所有值都是唯一的,否则它们不是:
while (fileInput.hasNextLine()) {
line = fileInput.nextLine();
List<String> lineArr = Arrays.asList(line.split(","));
if (new HashSet<String>(lineArr).size() != lineArr.size()) {
System.out.println(line);
}
}
答案 4 :(得分:0)
您应该使用String
比较equals()
。
然而,您的代码中还存在其他问题。在某些时候,i
和j
是相等的,因此lineArr[i]==lineArr[j]
将始终为真。
检查重复项的一种简单方法是使用Set
并检查其大小:
Set<String> lineSet = new HashSet<lineArr.length>;
for(String s : lineArr) {
lineSet.add(s);
}
if(lineSet.size() < lineArr.length) {
// there are duplicates
}
答案 5 :(得分:0)
public static void main(String [] args)抛出IOException {
Scanner fileInput = null;
try {
fileInput = new Scanner(new File("array_list.csv"));
String line;
while (fileInput.hasNextLine()) {
line = fileInput.nextLine();
String[] lineArr = line.split(",");
// check for missing values
boolean contains = true;
for(int i=0; i<lineArr.length; i++) {
for(int j=0; j<i; j++) {
if(lineArr[i].equals(lineArr[j])) {
contains = false;
break;
}
}
}
if(!contains) {
System.out.println(line);
}
else {
contains = true;
}
}
} finally {
if (null != fileInput) {
fileInput.close();
}
}
}
答案 6 :(得分:0)
以下是我查找重复元素的代码
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class StringManipulation {
public static void main(String[] args) {
StringManipulation manipulation=new StringManipulation();
manipulation.findDuplicateElementList();
//manipulation.findDuplicateElementbyMap();
}
private void findDuplicateElementList() {
String lineData = "ashish manish ashish manish sachin manish ashish neha manish";
String[] list = lineData.split(" ");
List<String> stringList = Arrays.asList(list);
// containingList=stringList;
Set<String> stringSet = new HashSet<String>();
for (int i = 0; i < stringList.size(); i++) {
int count = 0;
String currVal = stringList.get(i);
if (stringSet.contains(currVal)) {
continue;
} else {
for (String string : stringList) {
if (currVal.equals(string)) {
stringSet.add(currVal);
count++;
}
}
}
System.out.println("Occurances of " + currVal + " " + count);
}
}
}