如何检索数组值并分配给 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 的长度,你必须非常小心。