使用Java查找行中的重复值
所以我有一个包含这些行的文件使用Java查找行中的重复值,java,find,duplicates,row,Java,Find,Duplicates,Row,所以我有一个包含这些行的文件 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 {
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();
}
}
}
publicstaticvoidmain(字符串[]args)引发IOException{
Scanner fileInput=null;
试一试{
fileInput=新扫描仪(新文件(“array_list.csv”);
弦线;
while(fileInput.hasNextLine()){
line=fileInput.nextLine();
字符串[]lineArr=line.split(“,”);
//检查是否缺少值
布尔包含=真;
对于(int i=0;i由于要比较字符串,因此需要使用equals()
方法:
lineArr[i].equals(lineArr[j])
话虽如此,我可以看到其他一些可能会给您带来问题的事情:
- 注意逗号后的空格。示例数据不一致,因此最好调用
lineArr[i].trim()
以消除前导/尾随空格
- 您应该首先将
contains
设置为false,并尝试查找匹配项,然后将其设置为true和break。然后if(contains)
,打印该行
- 按照循环的设置方式,您将检查每个元素本身。因此,当然,您将为每行找到一个重复的元素
因为要比较字符串,所以需要使用equals()
方法:
lineArr[i].equals(lineArr[j])
话虽如此,我可以看到其他一些可能会给您带来问题的事情:
- 注意逗号后的空格。示例数据不一致,因此最好调用
lineArr[i].trim()
以消除前导/尾随空格
- 您应该首先将
contains
设置为false,并尝试查找匹配项,然后将其设置为true和break。然后if(contains)
,打印该行
- 按照循环的设置方式,您将检查每个元素本身。因此,当然,您将为每行找到一个重复的元素
我马上想到的问题是,您正在处理字符串,并且您当前正在使用“==”运算符来比较此行中的字符串:
if(lineArr[i]==lineArr[j]) {
这应该是:
if(lineArr[i].equals(lineArr[j])) {
我立即想到的问题是,您正在使用字符串,并且您当前正在使用“==”运算符来比较此行的字符串:
if(lineArr[i]==lineArr[j]) {
这应该是:
if(lineArr[i].equals(lineArr[j])) {
尝试将代码替换为
if(lineArr[i].equals(lineArr[j]))
反而
if(lineArr[i]==lineArr[j])
equals()
方法使用底层的Unicode
表示法比较字符串的实际内容,而==
仅使用对象在内存中的地址比较对象的标识。尝试将代码替换为
if(lineArr[i].equals(lineArr[j]))
反而
if(lineArr[i]==lineArr[j])
等于()
方法使用底层的Unicode
表示法比较字符串的实际内容,而==
方法使用对象在内存中的地址
仅比较对象的标识。将所有值放入一个集合,并检查其长度是否等于原始数组。如果是,则所有值s是唯一的,否则它们不是:
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);
}
}
while(fileInput.hasNextLine()){
line=fileInput.nextLine();
List lineArr=Arrays.asList(line.split(“,”);
if(新哈希集(lineArr.size()!=lineArr.size()){
系统输出打印项次(行);
}
}
将所有值放入一个集合,并检查其长度是否等于原始数组。如果是,则所有值都是唯一的,否则它们不是:
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);
}
}
while(fileInput.hasNextLine()){
line=fileInput.nextLine();
List lineArr=Arrays.asList(line.split(“,”);
if(新哈希集(lineArr.size()!=lineArr.size()){
系统输出打印项次(行);
}
}
您应该使用equals()
比较String
但是代码中还有其他问题。在某一点上,i
和j
是相等的,因此lineArr[i]==lineArr[j]
将始终为真
检查重复项的一种简单方法是使用集合
并检查其大小:
Set<String> lineSet = new HashSet<lineArr.length>;
for(String s : lineArr) {
lineSet.add(s);
}
if(lineSet.size() < lineArr.length) {
// there are duplicates
}
Set lineSet=新哈希集;
用于(字符串s:lineArr){
lineSet.add(s);
}
if(lineSet.size()
您应该使用equals()
比较String
但是代码中还有其他问题。在某一点上,i
和j
是相等的,因此lineArr[i]==lineArr[j]
将始终为真
检查重复项的一种简单方法是使用集合
并检查其大小:
Set<String> lineSet = new HashSet<lineArr.length>;
for(String s : lineArr) {
lineSet.add(s);
}
if(lineSet.size() < lineArr.length) {
// there are duplicates
}
Set lineSet=新哈希集;
用于(字符串s:lineArr){
lineSet.add(s);
}
if(lineSet.size()
公共静态void main(字符串[]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();
}
}
}
Scanner fileInput=null;
试试{
fileInput=新扫描仪(新文件(“array_list.csv”);
弦线;
while(fileInput.hasNextLine()){
line=fileInput.nextLine();
字符串[]lineArr=line.split(“,”);
//检查是否缺少值
布尔包含=真;
for(inti=0;ipublicstaticvoidmain(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();
}
}
}
Scanner fileInput=null;
试试{
fileInput=新扫描仪(新文件(“array_list.csv”);
弦线;
while(fileInput.hasNextLine()){
line=fileInput.nextLine();
字符串[]lineArr=line.split(“,”);
//检查是否缺少值
布尔包含=真;
对于(inti=0;i,这里是查找重复元素的代码
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);
}
}
}
导入java.util.array;
导入java.util.HashMap;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Map;
导入java.util.Set;
公共类操纵{
公共静态void main(字符串[]arg