import java.io.*;
import java.util.*;
class English{
StringBuffer CHname;
StringBuffer ENGname;
English(){
CHname=new StringBuffer();
ENGname=new StringBuffer();
}
void Cname(){
System.out.print(CHname);
}
void Ename(){
System.out.print(ENGname);
}
}
public class Eng {
public static void main(String[] args) {
try {
FileReader file=new FileReader("comEng.txt");
BufferedReader br=new BufferedReader(file);
String str;
ArrayList arr1=new ArrayList();
ArrayList arr2=new ArrayList();
Scanner sc=new Scanner(System.in);
while((str=br.readLine())!=null){
String[] strs=str.split(" ");
English e=new English();
for(int i=0;i<strs.length-1;i++){
e.ENGname.append(strs[i]);
e.ENGname.append(" ");
}
e.CHname.append(strs[strs.length-1]);
arr1.add(e.ENGname);
arr2.add(e.CHname);
}
for(int i=0;i<arr1.size();i++){
//System.out.println(((English)arr1.get(i)).ENGname);
System.out.println(arr1.get(i));
}
try{
StringBuffer sname=new StringBuffer(sc.next());
sname.append(" ");
int index=arr1.indexOf(sname);
System.out.println(arr2.get(index));
//System.out.println(arr1.contains(sname));
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("找不到该元素");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我创建了两个ArrayList对象,一个是arr1,用于存储e.ENGname,,一个是arr2,用于存储e.CHname。在使用scanner输入要查找的元素sname后,我用ArrayList的indexOf方法来查找在arr1中与sname匹配的元素的位置,但是不知道为什么index的值一直都是-1,实在令小弟不解,请各位大牛不吝赐教。
210 阅读
你的代码写得真是让人看得稀里糊涂的...
你用arraylist查找里面存放的stringbuffer?
那怎么能找到呢?里面存放的是对象实例,如果2个对象实例不完全相等是不会返回index的...
完全相等是指如果是对象的话, 返回的是同一个对象...
楼主能写出这样的程序说明确实是个新手...
直接用遍历的方法好像也不行,相应方法:
for(int i=0;i<arr1.size();i++){
String str2=(String)arr1.get(i);
if(str2.equals(sname))
{
System.out.println(arr2.get(i));
}
}
看一下这里你就知道我上面说的同一个对象是什么意思
http://book.2cto.com/201308/30832.html
我觉得你这出错在对java引用理解的错误
StringBuffer buffer1 = new StringBuffer();
StringBuffer buffer2 = new StringBuffer();buffer1.append("1");
buffer2.append("1");
System.out.println(buffer2.equals(buffer1));
你运行一下这段代码返回的是false,同理你上面也是这么比较这两个对象的,arr1.indexOf(sname); 你查看一下jdk源码 list的indexof用的是equals 方法所以是不相等的两个对象,返回的一直是-1。要是你要的结果想一样可以加上 toString方法将所有StringBuffer 转化为字符串 或者你也可以重写 StringBuffer 的 equals 方法和hashcode方法。
修改后的代码:
import java.io.*;
import java.util.*;
class English{
String CHname;
String ENGname;
English(){
CHname=new String();
ENGname=new String();
}
void Cname(){
System.out.print(CHname);
}
void Ename(){
System.out.print(ENGname);
}
}
public class Eng {
public static void main(String[] args) {
// TODO 自动生成的方法存根
try {
FileReader file=new FileReader("comEng.txt");
BufferedReader br=new BufferedReader(file);
String str;
ArrayList arr1=new ArrayList();
ArrayList arr2=new ArrayList();
Scanner sc=new Scanner(System.in);
while((str=br.readLine())!=null){
String[] strs=str.split(" ");
StringBuffer str1=new StringBuffer();
StringBuffer str2=new StringBuffer();
English e=new English();
for(int i=0;i<strs.length-1;i++){
str1.append(strs[i]);
str1.append(" ");
}
str2.append(strs[strs.length-1]);
e.ENGname=str1.toString();
e.CHname=str2.toString();
arr1.add(e.ENGname);
arr2.add(e.CHname);
}
for(int i=0;i<arr1.size();i++){
System.out.println(arr1.get(i));
}
for(int i=0;i<arr2.size();i++){
System.out.println(arr2.get(i));
}
try{
String sname = sc.nextLine();
int index=arr1.indexOf(sname);
System.out.println(arr2.get(index));
System.out.println(arr1.contains(sname));
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("找不到该元素");
}
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}