如何检索数组值并分配给 java 中的字符串变量
How to retrieve array values and assign to String variable in java
我正在尝试将文件中的内容存储到数组 String retval[]
中,将该数组复制到 String[] fed()
并将该数组传递给 main。到目前为止,数组存储和复制但是数组方法returns null in main String []feed; feed=uio.fed();
.
UserIO.java
package fileio;
import classes.*;
import java.util.*;
import java.lang.*;
import java.io.*;
public class UserIO
{
public String search (String line0)
{
String line;
try
{
FileInputStream ufin = new FileInputStream("E:\3rd sem\OOP\Projects\New folder (2)\BOOK LIBRARY\fileio\user.txt");
Scanner sc = new Scanner(ufin);
while (sc.hasNextLine())
{
line=sc.nextLine();
if(line.contains(line0))
{
String retval[]= line.split(" ");
feed= new String[retval.length];
for (String s: retval)
{
System.out.println("\t\t\tFrom retval:"+s);
}
for (int n=0;n<retval.length;n++)
{
feed[n]=retval[n];
System.out.println("\tFrom feed:"+feed[n]);
}
}
}
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
return line0;
}
public static String [] feed;
public static String[] fed()
{
String [] fd;
fd= new String[feed.length];
for (int n=0;n<feed.length;n++)
{
fd[n]=feed[n];
System.out.println("From fd:"+fd[n]);
}
return fd;
}
}
下面是主要方法
Execute.java
import java.lang.*;
import java.util.*;
import classes.*;
import fileio.*;
public class Execute
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String adminusername = "a";
String adminpassword = "p";
String readerusername = "r";
String readerpassword = "p";
String nreaderusername;
String nreaderpassword;
Library b = new Library();
UserFileReadWriteDemo ufrwd = new UserFileReadWriteDemo();
UserIO uio = new UserIO();
System.out.println("enter id ");
String id = sc.next();
uio.search(id);
try
{
String []feed;
feed=uio.fed();
//uio.fed()=feed.clone;
for(int s=0;s<feed.length;s+=5)
{
String nid00= null;
feed[0+s]= nid00;
String name00=null;
feed[1+s]= name00;
String age00= null;
feed[2+s]= age00;
String uname00= null;
feed[3+s]= uname00;
String upassword00= null;
feed[4+s]= upassword00;
Reader c00 = new Reader(nid00, name00, age00,uname00,upassword00);
b.insertReader(c00);
System.out.println(" In main"+feed[s]);
}
}
catch (NullPointerException n)
{
n.printStackTrace();
}
}
你的代码有点难读,而且有很多不必要的重复,例如方法 fed 没有作用,为什么不调用 search 并使 search return 包含找到的元素的数组?您正在搜索 return 您正在搜索的行,当您首先给出该参数时您已经知道,它只是 return 一个无用的值。
此外,很难理解搜索的实际作用,据我所知,它会在文件中找到最后一次出现的 line0,因为它会继续遍历行,每次找到 line0 时,它都会在 UserIO 中创建新的提要数组并消除所有它找到的前一个数组,并在读取所有文件后将 return。如果这是您的意图,那么这不是正确的方法,因为它效率低下,因为您不断创建将被丢弃的数组。如果您的意图是 line0 的最后一次出现,那么您只需将找到的行分配给 String 变量,当迭代完成时,只需拆分并 return 该数组,因为它将是 line0 在文件中的最后一次出现。
据我所知,fed 将 return null 的唯一方法是如果文件中没有包含 line0 的行,因为如果搜索在文件中至少找到一次 line0 就会初始化数组,这样feed 将是一个未初始化的数组,它将是一个空指针。
这些行没有意义:
String nid00= null;
feed[0+s]= nid00;
String name00=null;
feed[1+s]= name00;
String age00= null;
feed[2+s]= age00;
String uname00= null;
feed[3+s]= uname00;
String upassword00= null;
feed[4+s]= upassword00;
我认为你的意思是 nid00 = feed[0+s] 等等,因为你将赋值给 nid00 的方式和其他变量将始终为空,这将是无用的。
此外,当您尝试使用 Arrays.copyOf 方法或 System.arraycopy 复制数组时,它们可以节省您编写几行代码的时间,而且效率更高,请在文档中阅读它们。
最后一件事,如果您编写了代码,捕获空指针异常是没有用的,一般来说,您必须知道您的方法做了什么,如果您编写的代码中存在空指针异常,那么其中就有问题你的代码,例如,如果你写了一个方法 returns null 那么你必须知道 null return 的可能性并处理可能的 return,这样对你来说会更容易阅读您的代码并使用它,以及其他使用您的代码的人。
你得到的空指针是因为你试图在 fed 方法中获取未初始化的 feed 的长度,你必须非常小心。
我正在尝试将文件中的内容存储到数组 String retval[]
中,将该数组复制到 String[] fed()
并将该数组传递给 main。到目前为止,数组存储和复制但是数组方法returns null in main String []feed; feed=uio.fed();
.
UserIO.java
package fileio;
import classes.*;
import java.util.*;
import java.lang.*;
import java.io.*;
public class UserIO
{
public String search (String line0)
{
String line;
try
{
FileInputStream ufin = new FileInputStream("E:\3rd sem\OOP\Projects\New folder (2)\BOOK LIBRARY\fileio\user.txt");
Scanner sc = new Scanner(ufin);
while (sc.hasNextLine())
{
line=sc.nextLine();
if(line.contains(line0))
{
String retval[]= line.split(" ");
feed= new String[retval.length];
for (String s: retval)
{
System.out.println("\t\t\tFrom retval:"+s);
}
for (int n=0;n<retval.length;n++)
{
feed[n]=retval[n];
System.out.println("\tFrom feed:"+feed[n]);
}
}
}
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
return line0;
}
public static String [] feed;
public static String[] fed()
{
String [] fd;
fd= new String[feed.length];
for (int n=0;n<feed.length;n++)
{
fd[n]=feed[n];
System.out.println("From fd:"+fd[n]);
}
return fd;
}
}
下面是主要方法
Execute.java
import java.lang.*;
import java.util.*;
import classes.*;
import fileio.*;
public class Execute
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String adminusername = "a";
String adminpassword = "p";
String readerusername = "r";
String readerpassword = "p";
String nreaderusername;
String nreaderpassword;
Library b = new Library();
UserFileReadWriteDemo ufrwd = new UserFileReadWriteDemo();
UserIO uio = new UserIO();
System.out.println("enter id ");
String id = sc.next();
uio.search(id);
try
{
String []feed;
feed=uio.fed();
//uio.fed()=feed.clone;
for(int s=0;s<feed.length;s+=5)
{
String nid00= null;
feed[0+s]= nid00;
String name00=null;
feed[1+s]= name00;
String age00= null;
feed[2+s]= age00;
String uname00= null;
feed[3+s]= uname00;
String upassword00= null;
feed[4+s]= upassword00;
Reader c00 = new Reader(nid00, name00, age00,uname00,upassword00);
b.insertReader(c00);
System.out.println(" In main"+feed[s]);
}
}
catch (NullPointerException n)
{
n.printStackTrace();
}
}
你的代码有点难读,而且有很多不必要的重复,例如方法 fed 没有作用,为什么不调用 search 并使 search return 包含找到的元素的数组?您正在搜索 return 您正在搜索的行,当您首先给出该参数时您已经知道,它只是 return 一个无用的值。 此外,很难理解搜索的实际作用,据我所知,它会在文件中找到最后一次出现的 line0,因为它会继续遍历行,每次找到 line0 时,它都会在 UserIO 中创建新的提要数组并消除所有它找到的前一个数组,并在读取所有文件后将 return。如果这是您的意图,那么这不是正确的方法,因为它效率低下,因为您不断创建将被丢弃的数组。如果您的意图是 line0 的最后一次出现,那么您只需将找到的行分配给 String 变量,当迭代完成时,只需拆分并 return 该数组,因为它将是 line0 在文件中的最后一次出现。
据我所知,fed 将 return null 的唯一方法是如果文件中没有包含 line0 的行,因为如果搜索在文件中至少找到一次 line0 就会初始化数组,这样feed 将是一个未初始化的数组,它将是一个空指针。
这些行没有意义:
String nid00= null;
feed[0+s]= nid00;
String name00=null;
feed[1+s]= name00;
String age00= null;
feed[2+s]= age00;
String uname00= null;
feed[3+s]= uname00;
String upassword00= null;
feed[4+s]= upassword00;
我认为你的意思是 nid00 = feed[0+s] 等等,因为你将赋值给 nid00 的方式和其他变量将始终为空,这将是无用的。
此外,当您尝试使用 Arrays.copyOf 方法或 System.arraycopy 复制数组时,它们可以节省您编写几行代码的时间,而且效率更高,请在文档中阅读它们。
最后一件事,如果您编写了代码,捕获空指针异常是没有用的,一般来说,您必须知道您的方法做了什么,如果您编写的代码中存在空指针异常,那么其中就有问题你的代码,例如,如果你写了一个方法 returns null 那么你必须知道 null return 的可能性并处理可能的 return,这样对你来说会更容易阅读您的代码并使用它,以及其他使用您的代码的人。 你得到的空指针是因为你试图在 fed 方法中获取未初始化的 feed 的长度,你必须非常小心。