Java 从向量到向量的转换

Java 从向量到向量的转换,java,vector,Java,Vector,我目前正在尝试从坐标文件中提取数据,将其作为字符串转换成向量,然后从该向量中提取数据,并将其从字符串转换成一系列点,然后将其放置到第二个向量中 我在网上的任何地方都找不到解决方案。我有第一个向量的代码,以及将其转换为向量使用的双倍体的代码。但我需要知道如何从第一个向量中提取数据 我是Java新手,如果这是一个非常简单的问题,我深表歉意 这是我到目前为止写的代码。。我还没有司机,所以我不能测试它。 提前道歉 import java.io.*; import java.util.*; public

我目前正在尝试从坐标文件中提取数据,将其作为字符串转换成向量,然后从该向量中提取数据,并将其从字符串转换成一系列点,然后将其放置到第二个向量中

我在网上的任何地方都找不到解决方案。我有第一个向量的代码,以及将其转换为向量使用的双倍体的代码。但我需要知道如何从第一个向量中提取数据

我是Java新手,如果这是一个非常简单的问题,我深表歉意

这是我到目前为止写的代码。。我还没有司机,所以我不能测试它。 提前道歉

import java.io.*;
import java.util.*;

public class PointField {

     String ID;
     Vector<String> v;
     Vector<Point> v1;

     public PointField() {
           v = new Vector<String>(); 
           this.v1 = new Vector<Point>();
           this.ID = new String();
     }

     public String getID() {
           return this.ID;
     } 

     public Vector<String> getv() {
           return v;
     } 

     public Vector<Point> getv1() {
           return this.v1;
     } 

//Read all the lines from a file
     public Vector<String> getString(String fileName) throws Exception{

// Variable declarations
           File inputFile;
           FileInputStream inputStream;
           InputStreamReader inputStreamRead;
           BufferedReader br;

// Make the objects needed
           inputFile = new File(fileName);
           inputStream = new FileInputStream(inputFile);
           inputStreamRead = new InputStreamReader(inputStream);
           br = new BufferedReader(inputStreamRead);

// read all the lines and call getPoint method
           while (this.ID!= null) {
               this.ID = br.readLine();
               v.addElement(this.ID);
}
// DOESNT WORK FROM HERE Get String out of Vector v and make it return it as String ID
 public String getString(Vector<String> v) {
      Iterator<String> it;
      it = this.v.iterator();
      while(it.hasNext()) {
      this.ID = (String)it.next();
      }

             return ID; 
 }

//* Get String into two doubles and assign to x,y variables     
     public Point makePoints(String s, String delim) {
           while (st.hasMoreTokens()){
               st = new StringTokenizer(s, delim);  
               p = new Point(x,y);
               x = Double.parseDouble(st.nextToken());
               y = Double.parseDouble(st.nextToken());
          }     
            return p;       
    }


}
import java.io.*;
导入java.util.*;
公共类点域{
字符串ID;
向量v;
向量v1;
公共点域(){
v=新向量();
this.v1=新向量();
this.ID=新字符串();
}
公共字符串getID(){
返回此.ID;
} 
公共向量getv(){
返回v;
} 
公共向量getv1(){
返回这个.v1;
} 
//读取文件中的所有行
公共向量getString(字符串文件名)引发异常{
//变量声明
文件输入文件;
文件输入流输入流;
InputStreamReader inputStreamRead;
缓冲剂;
//制作所需的对象
inputFile=新文件(文件名);
inputStream=新文件inputStream(inputFile);
inputStreamRead=新的InputStreamReader(inputStream);
br=新的BufferedReader(inputStreamRead);
//阅读所有行并调用getPoint方法
while(this.ID!=null){
this.ID=br.readLine();
v、 addElement(this.ID);
}
//从这里不起作用从向量v中获取字符串并使其作为字符串ID返回
公共字符串getString(向量v){
迭代器;
它=这个.v.迭代器();
while(it.hasNext()){
this.ID=(String)it.next();
}
返回ID;
}
//*将字符串分成两个双精度,并分配给x,y变量
公共点生成点(字符串s、字符串delim){
而(st.hasMoreTokens()){
st=新的StringTokenizer(s,delim);
p=新点(x,y);
x=Double.parseDouble(st.nextToken());
y=Double.parseDouble(st.nextToken());
}     
返回p;
}
}

也许你能找到有用的 从 或者在该库中,您可以找到处理列表的各种方法(变换、筛选等)

您遇到的问题是迭代器…istead of to
it=this.v.iterator();
使用该迭代器执行一个实例变量您的
getString()
方法将只返回向量的最后一个元素,因为它每次创建一个新的迭代器,遍历所有元素,然后返回最后一个元素

我不太清楚为什么要将元素添加到一个向量中,然后将它们转换为第二个向量——难道不能一步完成吗

看起来您正在将这些行读入第一个向量OK

我建议您然后迭代该向量,使用方法调用(一次处理一个点的
makePoints
的修订版)将每个元素转换为新形式,然后将结果添加到v2,如果您仍然希望使用2个向量的话

Iterator<String> it = v.iterator();
while(it.hasNext()) {
   Point p = makePoint(it.next());
   v2.add(p);
}
Iterator it=v.Iterator();
while(it.hasNext()){
点p=生成点(it.next());
v2.添加(p);
}

我对代码进行了改进,使其一直工作到迭代器位!作为一般规则,您应该使用ArrayList而不是旧的Vector类。请在编辑代码时正确设置代码格式…抱歉!我对代码进行了格式化,使其更具可读性!我只是想用我知道的唯一方法来完成它!因此我将首先尝试使用ge如果我有时间,我可以尝试简化代码,使之只使用一个向量!我现在编辑了代码,使用了您建议的迭代器方法,我现在正在使用迭代器使用的makepoints方法-但是我的stringtokenizer有一个问题;我得到错误消息:线程“main”中出现异常java.lang.NullPointerException。您发布的代码不调用
makePoints()
,因此如果没有更多信息,我无法帮助您。并且您为每个
st.hasMoreTokens()
调用
st.nextToken()
两次,这是有风险的。makePoints方法试图将加载文件中的数据中的xy坐标分配给第一个向量。