我想从文本文件中存储2件事(仅限名称和值)
@ p之后的任何事情都应该是一个名为“Name”的字符串,并且“:”之后的任何内容应该是一个名为“Value”的整数示例输出应该看起来像 “Name =”public void end()“Value =”5 ... etc
文本文件的内容
~ public void end(): 5
~ public void <init>(org.apache.bcel.classfile.JavaClass arg0, gr.spinellis.ckjm.ClassMetricsContainer arg1): 1
~ public gr.spinellis.ckjm.ClassMetrics getMetrics(): 1
~ private void incRFC(String arg0, String arg1, org.apache.bcel.generic.Type[] arg2): 1
~ public void start(): 1
~ void registerMethodInvocation(String arg0, String arg1, org.apache.bcel.generic.Type[] arg2): 1
~ public void visitField(org.apache.bcel.classfile.Field arg0): 1
~ public void visitJavaClass(org.apache.bcel.classfile.JavaClass arg0): 5
~ void registerFieldAccess(String arg0, String arg1): 2
~ static String className(org.apache.bcel.generic.Type arg0): 3
~ public void registerCoupling(org.apache.bcel.generic.Type arg0): 1
~ void <init>(): 1
~ public gr.spinellis.ckjm.ClassMetrics getMetrics(String arg0): 2
~ public void printMetrics(gr.spinellis.ckjm.CkjmOutputHandler arg0): 3
这是我试图用来标题问题的代码
package javaapplication38;
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/* to read CSV file in Java. In this program we will read * list of metrics stored in CSV file as comma separated values. */
public class readingtry {
public static void main(String... args) {
List<Metrics> metric = readMetricFromCSV("C:\\Users\\hp\\Desktop\\alamah.txt");
// let's print all the metric read from CSV file
for (Metrics m : metric) {
System.out.println(m);
}
}
private static List<Metrics> readMetricFromCSV(String fileName) {
List<Metrics> metricsss = new ArrayList<>();
Path pathToFile = Paths.get(fileName);
// create an instance of BufferedReader
// using try with resource, Java 7 feature to close resources
try (BufferedReader br = Files.newBufferedReader(pathToFile,
StandardCharsets.US_ASCII)) {
// read the first line from the text file
String line = br.readLine();
// loop until all lines are read
while (line != null) {
String[] attributes = line.split(" "); // the file, using a comma as the delimiter
Metrics valueOfMetric = createMetric(attributes);
metricsss.add(valueOfMetric); // adding metric into ArrayList
line = br.readLine();
// use string.split to load a string array with the values from
// each line of
// the file, using a comma as the delimiter
String[] attributes = line.split(" ~ ");
Metrics valueOfMetric = createMetric(attributes);
// adding book into ArrayList
metricsss.add(valueOfMetric);
// read next line before looping
line = br.readLine();
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return metricsss;
}
private static Metrics createMetric(String[] metadata) {
//classname classvalue
String name= (metadata[0]);
int value = Integer.parseInt(metadata[1 ]);
//
return new Metrics(name,value);
}
}
class Metrics {
private String name;
private int value;
public Metrics( String name,int value) {
this.name = name;
this.value=value;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getvalue() { return value; }
public void setvalue(int value) { this.value = value; }
@Override
public String toString() {
return "name= " + name +"value = " + value+"\n\n" ;
}
}
答案 0 :(得分:1)
// read the first line from the text file
String line = br.readLine();
// loop until all lines are read
while (line != null) {
// use string.split to load a string array with the values from
// each line of
// the file, using a comma as the delimiter
String[] attributes = line.split(" ~ ");
if (attributes.length == 2) {
String[] nameValue = attributes[1].split(": ");
if (nameValue.length == 2) {
Metrics valueOfMetric = createMetric(nameValue);
// adding book into ArrayList
metricsss.add(valueOfMetric);
}
}
// read next line before looping
line = br.readLine();
}
答案 1 :(得分:0)
我认为你的问题就是分裂字符串的方式。试试这个:
public static void main(String[] args) {
String input = "~ public void end(): 5";
String[] split = input.split(":");
System.out.println(split[0].substring(split[0].indexOf("~") + 1).trim());
System.out.println(split[1].trim());
}
答案 2 :(得分:0)
这是您的代码:
public class RegexTest {
public static void main(String args[])
{
String str = "~ public void end(): 5";
String[] arr1 = str.split("~ ");
String[] arr2 = arr1[1].split(": ");
String name = arr2[0], value = arr2[1];
System.out.println("Name: " + name + ", Value: " + value);
}
}