Java 数组包含空值

Java 数组包含空值,java,Java,我试图从文本文件中读取一些单词,然后将它们排列成降序数组。 我成功地读取了单词,将单词存储在一个数组中,当我继续将其按降序排列时,我注意到数组中还包含一些空值。 当我尝试使用(下面的完整代码)删除空值时 Arrays.stream(w.words).filter(x->x!=null).toArray(),它仍然不起作用。 经过一段时间的努力,现在我想我需要一些帮助。 本阶段代码、文本文件及输出如下: ` null是因为您声明的字数组(预定义大小)。也许您可以更改它并使用ArrayList(因为

我试图从文本文件中读取一些单词,然后将它们排列成降序数组。 我成功地读取了单词,将单词存储在一个数组中,当我继续将其按降序排列时,我注意到数组中还包含一些空值。 当我尝试使用(下面的完整代码)删除空值时
Arrays.stream(w.words).filter(x->x!=null).toArray(),它仍然不起作用。
经过一段时间的努力,现在我想我需要一些帮助。
本阶段代码、文本文件及输出如下:
`


null是因为您声明的字数组(预定义大小)。也许您可以更改它并使用ArrayList(因为它可以是动态大小的)而不是字符串数组,这可以帮助您解析。为了帮助您,请遵循以下更改:

  • private List words=new ArrayList()
  • /*更新readFile()中的下一行,而不是单词[count]=scanLine.next()*/
    words.add(scanLine.next())
  • 更改方法签名排序(列表字符串)
  • //同时更新以下声明
    int[]lengthsArray=new int[string.size()];
    String[]sortedStrings=新字符串[String.size()]
  • 在print语句中将数组.toString(w.words)更改为仅w.words

  • 希望这有帮助。一切看起来都很好。

    @Obicere我名为file.txt的输入文件只包含一行,与ACT、CAT、AT、RAT、PAT、TAT等相同。我想做的是将这些单词按降序排列,就是这样。@Obicere我不知怎么删除了你的评论?我看不到你刚才的评论是的,我刚刚意识到你把它包括进去了
    scanner.next()
    按空格分隔,将其切换为逗号。我还避免使用缓冲阅读器和扫描仪。哦,好的。我还需要学习另一点,谢谢你的链接。我在这里写了一个简单的例子:谢谢你,关于@Naveen的详细信息,我想说它部分有效,因为出于某种原因,我的排序功能仍然没有按长度排序单词。但是谢谢你的回答,因为它解决了空指针异常的问题。很高兴知道这对你有帮助。对于排序,您必须为此更新代码逻辑。。。
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Objects;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.Set;
    import java.util.stream.Collectors;
    
    public class Practise {
    
        private Scanner fp;
        private Scanner scanLine;
        private String[] words = new String[6] ;
    
        int count;
        String temp;
        String [][] samewords;
        int size;
        String[] words_sorted;    
    
        public Practise() {
            openFile();
            readFile();   
            printa();
        }
    
        private void openFile() {
            try {
                fp = new Scanner(new File ("D:\\workspace\\file.txt"));   
            }
            catch (Exception e) {
                System.out.println("File does not exist");
            }
        }
    
        private void readFile() {
            try {    
                count = 0;    
                while (fp.hasNextLine()) {
                    String strLine = fp.nextLine();    
                    scanLine = new Scanner(strLine);        
                    words[count] = scanLine.next();    
                    System.out.println("Here2"+words[count]);    
                    System.out.println();
                    count++;       
                }       
            }
            catch (Exception e) {           
                System.err.print("Error: " + e.getMessage());
            }
        }
    
        private void printa() {         
             try (BufferedReader br = new BufferedReader(new FileReader("D:\\workspace\\file.txt"))) {
                 size = findLongestWords();
                 samewords = new String[size][size];
                 String line;
                 int i = 0;
                 String [] temp;
                 while ((line = br.readLine()) != null) {
                     temp = line.split(",");                       
                     for (int j = 0; j < samewords[i].length; j++) {
                         samewords[i][j] = temp[j];
                         System.out.println(samewords[i][j]);
                     }
                     i++;
                 }                  
                 //System.out.println(answers[1][2]);
             } catch (IOException e) {
                 e.printStackTrace();
             } 
        }
    
        public int findLongestWords() throws FileNotFoundException {
    
            int longest_word = 0;
            int current;
            BufferedReader sc = new BufferedReader(new FileReader("D:\\workspace\\file.txt"));    
            String li;
            String[] tr;    
            try {
                while ((li = sc.readLine())!= null ) {
                    tr = li.split(",");
                    current = tr.length;                      
                    if (current > longest_word) {
                        longest_word = current;
                    }    
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("\n"+longest_word+"\n");
            return longest_word;
        }
        private  String[] sort(String[] string) {
            /*Local variables*/
            Map<String, Integer> map=new LinkedHashMap<String, Integer>();
            Map<String, Integer> mapCopy=new LinkedHashMap<String, Integer>();
            int [] lengthsArray=new int[string.length];
            String [] sortedStrings=new String[string.length];
            int counter1=0;
            int counter2=0;
    
            /* Store all the pairs <key,value>
             * i.e <string[i],string[i].length>
             */
            for(String s:string) {
                System.out.println(s);
                map.put((String) s,  s.length());
                lengthsArray[counter1]= s.length();//store all the lengths
                counter1++;    
            }
            mapCopy=new LinkedHashMap<String, Integer>(map);//make a copy of map
            Arrays.sort(lengthsArray);//sort the array of lengths    
    
            /*
             * Sort array according to the array of lengths
             * by finding the matching value from the map 
             * then add it to the final string array,and then remove it from the map 
             */
             for(int item:lengthsArray) {    
                 for(Map.Entry<String, Integer> e:map.entrySet()) {
                     if(item==e.getValue()) {
                         sortedStrings[counter2]=e.getKey();
                         counter2++;
                         map.remove(e.getKey());
                         break;
                     }   
                 }
             }
    
             map=mapCopy;
             System.out.println(map);//print map
             return sortedStrings;
         }
         public static void main(String[] args) {
             Practise w = new Practise();
             System.out.println(Arrays.toString(w.words));
             w.sort(w.words);           
         }      
    }
    `
    
    Here2ACT,CAT,AT,RAT,PAT,TAT
    
    
      6
    
      ACT
      CAT
      AT
      RAT
      PAT
      TAT
      [ACT,CAT,AT,RAT,PAT,TAT, null, null, null, null, null]
      ACT,CAT,AT,RAT,PAT,TAT
      null
      Exception in thread "main" java.lang.NullPointerException
          at Practise.sort(Practise.java:190)
          at Practise.main(Practise.java:239)