Java 如何创建一个静态解析方法,该方法接受带有制表符分隔部分的字符串?
我怎样才能开始。我知道如何制作这个方法,但我不知道到底要在里面放些什么。我正在制作一个歌曲类,它包含年份、歌曲排名、艺术家和头衔。我从另一个txt文件中获取此信息。歌曲应该有一个静态解析方法,它接受一个带有制表符分隔部分的字符串并返回一个歌曲对象。 这是我开始使用的代码,但我不知道这是否合法。我也不知道它是否真的能正常工作Java 如何创建一个静态解析方法,该方法接受带有制表符分隔部分的字符串?,java,eclipse,Java,Eclipse,我怎样才能开始。我知道如何制作这个方法,但我不知道到底要在里面放些什么。我正在制作一个歌曲类,它包含年份、歌曲排名、艺术家和头衔。我从另一个txt文件中获取此信息。歌曲应该有一个静态解析方法,它接受一个带有制表符分隔部分的字符串并返回一个歌曲对象。 这是我开始使用的代码,但我不知道这是否合法。我也不知道它是否真的能正常工作 public class Billboard { private int year; private int rank; private String artist; pri
public class Billboard {
private int year;
private int rank;
private String artist;
private String title;
public void setYear(int Y){
this.year = Y;
}
public void setRank(int R){
this.rank = R;
}
public void setArtist(String A){
this.artist = A;
}
public void setTitle(String T){
this.title = T;
}
public int getYear(){
return this.year;
}
public int getRank(){
return this.rank;
}
public String getArtist(){
return this.artist;
}
public String getTitle(){
return this.title;
}
public void Song (String Line) {
String[] token = line.split("\t");
title = token[0];
artist = token[1];
year = Integer.parseInt(token[2]);
}
}
换成
public static Song createSong (String aLine_in)
注意这些变化:
static
添加了关键字\u是前缀
Song aSong = Song.createSong("...\t...\t...");
您不能将此方法设置为静态,因为它访问对象变量:
title,artist,year
因此,您需要使用构造函数,或将对象传递给方法:
public Billboard (String Line) {
String[] token = line.split("\t");
this.title = token[0];
this.artist = token[1];
this.year = Integer.parseInt(token[2]);
}
或
歌曲课:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import utils.Utils;
public class Song {
private String title;
private String artist;
private int rank;
private int year;
public Song(String title, String artist, int rank, int year){
this.title = title;
this.artist = artist;
this.year = year;
this.rank = rank;
}
public String getTitle() {
return title;
}
public String getArtist() {
return artist;
}
public int getRank() {
return rank;
}
public int getYear() {
return year;
}
public static Song parseLine(String line, String delimiter) {
String[] parts = Utils.splitLine(line, delimiter);
return new Song(parts[0], parts[1], Integer.parseInt(parts[2]),Integer.parseInt(parts[3]));
}
public static List<Song> readFile(String dataFile) {
List<Song> lines = new ArrayList<Song>();
String line = null;
try{
FileReader fr = new FileReader(new File(dataFile));
BufferedReader br = new BufferedReader(fr);
while((line = br.readLine()) != null){
lines.add(parseLine(line, "\t"));
}
}catch(IOException e){
e.printStackTrace();
}
return lines;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((artist == null) ? 0 : artist.hashCode());
result = prime * result + rank;
result = prime * result + ((title == null) ? 0 : title.hashCode());
result = prime * result + year;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Song other = (Song) obj;
if (artist == null) {
if (other.artist != null)
return false;
} else if (!artist.equals(other.artist))
return false;
if (rank != other.rank)
return false;
if (title == null) {
if (other.title != null)
return false;
} else if (!title.equals(other.title))
return false;
if (year != other.year)
return false;
return true;
}
}
如果您想知道它是否有效,那么我建议您为它编写一个单元测试。
public static Billboard parseString(String Line) {
return parseString(line, new Billboard());
}
public static Billboard parseString(String Line, Billboard billboard) {
String[] token = line.split("\t");
billboard.setTitle(token[0]);
billboard.setArtist(token[1]);
billboard.setYear(Integer.parseInt(token[2]));
return billboard;
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import utils.Utils;
public class Song {
private String title;
private String artist;
private int rank;
private int year;
public Song(String title, String artist, int rank, int year){
this.title = title;
this.artist = artist;
this.year = year;
this.rank = rank;
}
public String getTitle() {
return title;
}
public String getArtist() {
return artist;
}
public int getRank() {
return rank;
}
public int getYear() {
return year;
}
public static Song parseLine(String line, String delimiter) {
String[] parts = Utils.splitLine(line, delimiter);
return new Song(parts[0], parts[1], Integer.parseInt(parts[2]),Integer.parseInt(parts[3]));
}
public static List<Song> readFile(String dataFile) {
List<Song> lines = new ArrayList<Song>();
String line = null;
try{
FileReader fr = new FileReader(new File(dataFile));
BufferedReader br = new BufferedReader(fr);
while((line = br.readLine()) != null){
lines.add(parseLine(line, "\t"));
}
}catch(IOException e){
e.printStackTrace();
}
return lines;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((artist == null) ? 0 : artist.hashCode());
result = prime * result + rank;
result = prime * result + ((title == null) ? 0 : title.hashCode());
result = prime * result + year;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Song other = (Song) obj;
if (artist == null) {
if (other.artist != null)
return false;
} else if (!artist.equals(other.artist))
return false;
if (rank != other.rank)
return false;
if (title == null) {
if (other.title != null)
return false;
} else if (!title.equals(other.title))
return false;
if (year != other.year)
return false;
return true;
}
}
public class Utils {
public static String[] splitLine(String line, String delimiter) {
if(delimiter.equals("|")){
delimiter = "\\|";
}
if(delimiter.equals(".")){
delimiter = "\\.";
}
String[] rtn = line.split(delimiter);
for(int i=0;i<rtn.length;i++){
rtn[i] = rtn[i].trim();
}
return rtn;
}
}
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
public class HelpTest {
@Test
public void test_parseLine() {
// tabs betwen the title artist year and rank
String line = "Run Runaway Slade 20 1984";
Song expected = new Song("Run Runaway","Slade", 20, 1984);
Song actual = Song.parseLine(line, "\t");
assertEquals(expected, actual);
}
@Test
public void test_readFile() {
String path = "src/testSongData";
Song song = new Song("Run Runaway","Slade", 20, 1984);
List<Song> expected = new ArrayList<Song>();
expected.add(song);
List<Song> actual = Song.readFile(path);
assertEquals(expected, actual);
}
}
Run Runaway Slade 20 1984