【发布时间】:2014-01-14 17:55:49
【问题描述】:
我想知道是否可以使用比较器递归地比较文件中的字符串并根据其中的元素替换字符串。我有一些数据:
331028124,24,7912,CF,1,1
331028124,24,7631,2B,2,1
331028124,24,5909,1B,3,1
331028124,24,8394,P,3,2
331028124,24,7245,LF,4,1
331028124,17,9194,SS,1,1
我想买
331028124,24,7912,CF,1,1
331028124,24,7631,2B,2,1
331028124,24,8394,P,3,2
331028124,24,7245,LF,4,1
331028124,17,9194,SS,1,1
实际上应该做的是比较两个字符串,比如331028124,24,5909,1B,3,1和331028124,24,8394,P,3,2
然后将第一个字符串替换为第二个字符串,因为字符串的最后一个值中的数字更大...
到目前为止,我有:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class BattingOrder {
String game_ID;
String team_ID;
String player_ID;
String position;
String battingOrder;
String subOrder;
public BattingOrder(String game, String team, String player, String place,
String batter, String sub) {
game_ID = game;
team_ID = team;
player_ID = player;
position = place;
battingOrder = batter;
subOrder = sub;
}
@Override
public String toString() {
return game_ID + "," + team_ID + "," + player_ID + "," + position + ","
+ battingOrder;
}
public static void main(String[] args) throws IOException {
FileInputStream fstream = new FileInputStream(
"BatterInfo.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
List<BattingOrder> sortList = new ArrayList<BattingOrder>();
for (String line; (line = br.readLine()) != null;) {
String delims = "[,]";
String[] parsedData = line.split(delims);
sortList.add(new BattingOrder(parsedData[0], parsedData[1],
parsedData[2], parsedData[3], parsedData[4], parsedData[5]));
}
System.out.println("Before Sort");
for (BattingOrder order : sortList) {
System.out.println(order);
}
Collections.sort(sortList, new Comparator<BattingOrder>() {
@Override
public int compare(BattingOrder one, BattingOrder two) {
if (one.game_ID.equals(two.game_ID)
|| one.team_ID.equals(two.team_ID)
|| one.battingOrder.equals(two.battingOrder)) {
return one.subOrder.compareTo(two.subOrder);
} else {
return one.team_ID.compareTo(two.team_ID);
}
}
});
System.out.println("After Sort");
for (BattingOrder order : sortList) {
System.out.println(order);
}
br.close();
}
}
输出:
Before Sort
331028124,24,7912,CF,1,1
331028124,24,7631,2B,2,1
331028124,24,5909,1B,3,1
331028124,24,8394,P,3,2
331028124,24,7245,LF,4,1
331028124,17,9194,SS,1,1
After Sort
331028124,24,7912,CF,1,1
331028124,24,7631,2B,2,1
331028124,24,7245,LF,4,1
331028124,24,5909,1B,3,1
331028124,17,9194,SS,1,1
331028124,24,8394,P,3,2
我想要:
331028124,24,7912,CF,1,1
331028124,24,7631,2B,2,1
331028124,24,8394,P,3,2
331028124,24,7245,LF,4,1
331028124,17,9194,SS,1,1
我做错了什么?
【问题讨论】:
-
它已经按照您的要求对您的数据进行了排序。我不确定您真正想要做什么是否足够清楚以提供答案。
-
在我看来,您想保留一组 BattingOrder,每次遇到比该组更好的 BattingOrder 时,您都进行替换。
-
我看到他们必须是同一支球队、同一场比赛和同一击球顺序才会发生冲突?而决定因素是子订单? (我说的对吗)?
-
@BoristheSpider 我已经更新了我希望输出的内容...基本上将第 3 行替换为第 4 行,因为最后一个数字 (2) 大于 (1) 即...更好
-
好的,1) 将您的数据存储在 proper
Object- 将数字存储为数字。 2)按照您的描述实现您的equals方法。 3) 将数据放入Set并使用contains方法。
标签: java arrays string sorting comparator