在java中使用stringtokenizer显示文件中的选定内容

在java中使用stringtokenizer显示文件中的选定内容,java,file-io,java-io,stringtokenizer,Java,File Io,Java Io,Stringtokenizer,任何人都可以建议,如何在java中使用字符串标记来读取文件中的所有数据,并仅显示其部分内容。比如,如果我有 apple = 23456, mango = 12345, orange= 76548, guava = 56734 我需要选择apple,输出中应该显示apple对应的值 这是密码 import java.io.BufferedReader; import java.io.FileReader; import java.util.StringTokenizer; public cla

任何人都可以建议,如何在java中使用字符串标记来读取文件中的所有数据,并仅显示其部分内容。比如,如果我有

apple = 23456, mango = 12345, orange= 76548, guava = 56734
我需要选择apple,输出中应该显示apple对应的值

这是密码

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;

public class ReadFile {

public static void main(String[] args) {

try { 

String csvFile = "Data.txt";

   //create BufferedReader to read csv file
   BufferedReader br = new BufferedReader(new FileReader(csvFile));
   String line = "";
   StringTokenizer st = null;

   int lineNumber = 0; 
   int tokenNumber = 0;

   //read comma separated file line by line
   while ((line = br.readLine()) != null) {
     lineNumber++;

     //use comma as token separator
     st = new StringTokenizer(line, ",");

     while (st.hasMoreTokens()) {
       tokenNumber++;

       //display csv values
       System.out.print(st.nextToken() + "  ");
     }

     System.out.println();

     //reset token number
     tokenNumber = 0;
   }

  } catch (Exception e) {
   System.err.println("CSV file cannot be read : " + e);
  }
  }   

  }
这是我正在处理的文件:

ImageFormat=GeoTIFF
ProcessingLevel=GEO
ResampCode=CC
NoScans=10496
NoPixels=10944
MapProjection=UTM 
Ellipsoid=WGS_84
Datum=WGS_84
MapOriginLat=0.00000000
MapOriginLon=0.00000000
ProdULLat=18.54590200
ProdULLon=73.80059300
ProdURLat=18.54653200
ProdURLon=73.90427600
ProdLRLat=18.45168500
ProdLRLon=73.90487900
ProdLLLat=18.45105900
ProdLLLon=73.80125300
ProdULMapX=373416.66169100
ProdULMapY=2051005.23286800
ProdURMapX=384360.66169100
ProdURMapY=2051005.23286800
ProdLRMapX=373416.66169100
ProdLRMapY=2040509.23286800
ProdLLMapX=384360.66169100
ProdLLMapY=2040509.23286800
除此之外,我只需要显示以下内容: 诺斯坎人 诺皮克斯 普罗杜拉特 普罗杜隆 生产线
prodlron

使用bufferedreader读取完整的行,并将其传递给stringtokenizer,标记器为“=”[如您在文件中所述]

有关更多信息,请粘贴您的文件和您迄今为止尝试的内容

ArrayList<String> list = new ArrayList<String>();
list.add("NoScans");
list.add("NoPixels");
list.add("ProdULLat");
list.add("ProdULLon");
list.add("ProdLRLat");
list.add("ProdLRLon");

//read a line from a file.

    while ((line = br.readLine()) != null) {
         lineNumber++;

         //use 'equal to' as token separator
         st = new StringTokenizer(line, "=");
         //check for tokens from the above string tokenizer.
         while (st.hasMoreTokens()) {
         String key = st.nextToken(); //this will give the first token eg: NoScans
         String value = st.nextToken(); //this will give the second token eg:10496

         //check the value is present in the list or not. If it is present then print 
         //the value else leave it as it is.
         if(list.contains(key){
          //display csv values
           System.out.print(key+"="+ " "+value);
           }
         }
ArrayList list=new ArrayList();
列表。添加(“NoScans”);
列表。添加(“无像素”);
列表。添加(“ProdULLat”);
列表。添加(“ProdULLon”);
列表。添加(“ProdLRLat”);
列表。添加(“产品”);
//从文件中读取一行。
而((line=br.readLine())!=null){
lineNumber++;
//使用“等于”作为标记分隔符
st=新的StringTokenizer(行“=”);
//检查来自上述字符串标记器的标记。
而(st.hasMoreTokens()){
String key=st.nextToken();//这将给出第一个标记,例如:NoScans
String value=st.nextToken();//这将给出第二个标记,例如:10496
//检查列表中是否存在该值。如果存在,则打印
//其他值保持原样。
if(list.contains)(键){
//显示csv值
系统输出打印(键+“=”+“+”+值);
}
}

我编写了代码,假设您已经将文件中的数据存储到字符串中

public static void main(String[] args) {
    try {
        String[] CONSTANTS = {"apple", "guava"};
        String input = "apple = 23456, mango = 12345, orange= 76548, guava = 56734";
        String[] token = input.split(",");

        for(String eachToken : token) {
            String[] subToken = eachToken.split("=");
            // checking whether this data is required or not. 
            if(subToken[0].trim().equals(CONSTANTS[0]) || subToken[0].trim().equals(CONSTANTS[1])) {
                System.out.println("No Need to do anything");
            } else {
                System.out.println(subToken[0] + " " + subToken[1]);
            }
        }
    } catch(Exception e) {
        e.printStackTrace();
    }
}
“我注意到您已经编辑了问题并添加了代码。对于新版本的问题,您仍然可以在读取文件中的字符串时调用方法并获得所需的值!”


看起来你真的在要求我们为你做工作。阅读文档:到目前为止你做了什么?如果你尝试了一些东西,遇到了一个让你困惑的错误,请发布!我们很乐意提供帮助:)请不要重复你的问题。这与你的另一个问题不一样吗?到目前为止,我可以读取文件的内容,使用stringtokenizer显示它。但我正在解决如何从文件中选择单个元素的问题。我已经发布了代码。我可以读取并显示文件的内容……但无法理解如何执行上面提到的是你粘贴的那一个吗?你遇到了什么错误和困难?我需要读取整个文件,只显示其中的一部分。不是所有的数据。请提供一个示例文件。添加项目[NoScans NoPixels ProdULLat ProdULLat ProdULLat ProdULLat ProdULLat Prodlron]在列表中。将该行传递给字符串标记器并检查列表中是否存在第一个标记。while((line=br.readLine())!=null){//使用逗号作为标记分隔符st=new StringTokenizer(line,“=”);while(st.hasMoreTokens()){string key=st.nextToken();string value=st.nextToken();if(list.contains(key){//tokenNumber++;//显示csv值System.out.print(st.nextToken()+“”);}除了将数据复制到输入文件中,还有其他方法将数据从文件存储到字符串吗?因为,我的文件非常大。只需分块执行。永远不要从文件中读取整个数据。我们可以逐行读取整个文件,并使用if条件显示值吗?是的,我们应该这样做。而不是读取整个文件。请参阅了解更多详细信息。这很有帮助。但是,如何仅选择和显示整个文件的一部分??
public class Test {

  public String getValue(String str, String strDelim, String keyValueDelim, String key){
      StringTokenizer tokens = new StringTokenizer(str, strDelim);
      String sentence;

      while(tokens.hasMoreElements()){
          sentence = tokens.nextToken();
          if(sentence.contains(key)){
             return sentence.split(keyValueDelim)[1];
          }
       }        
     return  null;
   }

  public static void main(String[] args) {
    System.out.println(new Test().getValue("apple = 23456, mango = 12345, orange= 76548, guava = 56734", ",", "=", "apple"));

  }
}