如何使用Java将姓氏按字母顺序从一个文件排序到另一个文件?
我写了这段代码,不知道如何将姓氏按字母顺序从我的文件排序到另一个文件如何使用Java将姓氏按字母顺序从一个文件排序到另一个文件?,java,sorting,Java,Sorting,我写了这段代码,不知道如何将姓氏按字母顺序从我的文件排序到另一个文件 import java.io.*; import java.util.*; class Asmuo { String pavarde; String vardas; long buvLaikas; int atv1; int atv2; int atv3; } class Irasas { Asmuo duom; Irasas kitas; } class
import java.io.*;
import java.util.*;
class Asmuo {
String pavarde;
String vardas;
long buvLaikas;
int atv1;
int atv2;
int atv3;
}
class Irasas {
Asmuo duom;
Irasas kitas;
}
class Sarasas {
private Irasas p;
Sarasas() {
p = null;
}
Irasas itrauktiElementa(String pv, String v, long laikas, int d0, int d1,
int d2) {
String pvrd, vrd;
int data0;
int data1;
int data2;
long lks;
lks = laikas;
pvrd = pv;
vrd = v;
data0 = d0;
data1 = d1;
data2 = d2;
Irasas r = new Irasas();
r.duom = new Asmuo();
uzpildymasDuomenimis(r, pvrd, vrd, lks, d0, d1, d2);
r.kitas = p;
p = r;
return r;
}
void uzpildymasDuomenimis(Irasas r, String pv, String v, long laik, int d0,
int d1, int d2) {
r.duom.pavarde = pv;
r.duom.vardas = v;
r.duom.atv1 = d0;
r.duom.buvLaikas = laik;
r.duom.atv2 = d1;
r.duom.atv3 = d2;
}
void spausdinti() {
Irasas d = p;
int i = 0;
try {
FileWriter fstream = new FileWriter("rez.txt");
BufferedWriter rez = new BufferedWriter(fstream);
while (d != null) {
System.out.println(d.duom.pavarde + " " + d.duom.vardas + " "
+ d.duom.buvLaikas + " " + d.duom.atv1 + " "
+ d.duom.atv2 + " " + d.duom.atv3);
rez.write(d.duom.pavarde + " " + d.duom.vardas + " "
+ d.duom.buvLaikas + " " + d.duom.atv1 + " "
+ d.duom.atv2 + " " + d.duom.atv3 + "\n");
d = d.kitas;
i++;
}
rez.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
public class Gyventojai {
public static void main(String args[]) {
Sarasas sar = new Sarasas();
Calendar atv = Calendar.getInstance();
Calendar isv = Calendar.getInstance();
try {
FileInputStream fstream = new FileInputStream("duom.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String eil;
while ((eil = br.readLine()) != null) {
String[] cells = eil.split(" ");
String pvrd = cells[0];
String vrd = cells[1];
atv.set(Integer.parseInt(cells[2]), Integer.parseInt(cells[3]),
Integer.parseInt(cells[4]));
isv.set(Integer.parseInt(cells[5]), Integer.parseInt(cells[6]),
Integer.parseInt(cells[7]));
long laik = (isv.getTimeInMillis() - atv.getTimeInMillis())
/ (24 * 60 * 60 * 1000);
int d0 = Integer.parseInt(cells[2]);
int d1 = Integer.parseInt(cells[3]);
int d2 = Integer.parseInt(cells[4]);
sar.itrauktiElementa(pvrd, vrd, laik, d0, d1, d2);
}
in.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
sar.spausdinti();
}
}
如果我做了一些不正确的假设,你必须原谅我,因为我不会说立陶宛语??所以你的变量和方法名让我很难理解你的代码 看起来您有自己的“个人”记录链表结构。有几种不同的方法可以根据姓氏对记录进行排序。一种方法是编写一种方法,通过手动移动节点并断开/重新创建节点之间的链接来对链接列表进行排序 另一种方法是将列表转储到标准列表中,并使用
Collections.sort()
和适当的比较器
类对列表进行排序
class Sarasas {
...
private List<Asmuo> sortList() {
// dump your list into an ArrayList
List<Asmuo> data = new ArrayList<Asmuo>();
Irasas node = p; // start with the Sarasas object's head node
while (node != null) {
data.add(node);
node = node.kitas;
}
// sort your list
Collections.sort(data, new AsmuoComparator() );
return data;
}
class AsmuoComparator implements Comparator<Asmuo>
{
public int compare(Asmuo p1, Asmuo p2)
{
return p1.pavarde.compareToIgnoreCase(p2.pavarde);
// I'm assuming pavarde is the surname?
}
}
Sarasas类{
...
私有列表分类列表(){
//将列表转储到ArrayList中
列表数据=新的ArrayList();
Irasas node=p;//从Sarasas对象的头节点开始
while(节点!=null){
数据添加(节点);
node=node.kitas;
}
//给你的名单排序
Collections.sort(数据,新的asmuoparator());
返回数据;
}
类AsmuoComparator实现Comparator
{
公共整数比较(Asmuo p1、Asmuo p2)
{
返回p1.pavarde.compareTignoreCase(p2.pavarde);
//我猜帕瓦德是姓?
}
}
现在,您可以根据需要使用返回的列表。要按顺序遍历列表并对每个项目执行操作,请执行以下操作:
List<Asmuo> data = sortList();
for (Asmuo a : data) {
// write to file, etc...
}
List data=sortList();
用于(Asmuo a:数据){
//写入文件等。。。
}
祝你好运!如果我的任何假设是错误的,请告诉我,这样我就可以修改我的答案。如果我做了一些错误的假设,你必须原谅我,因为我不会说立陶宛语??所以你的变量和方法名让我很难理解你的代码 您似乎有自己的“个人”记录的链接列表结构。有几种不同的方法可以根据姓氏对记录进行排序。一种方法是编写一种方法,通过手动移动节点并断开/重新创建节点之间的链接来对链接列表进行排序 另一种方法是将列表转储到标准列表中,并使用
Collections.sort()
和适当的比较器
类对列表进行排序
class Sarasas {
...
private List<Asmuo> sortList() {
// dump your list into an ArrayList
List<Asmuo> data = new ArrayList<Asmuo>();
Irasas node = p; // start with the Sarasas object's head node
while (node != null) {
data.add(node);
node = node.kitas;
}
// sort your list
Collections.sort(data, new AsmuoComparator() );
return data;
}
class AsmuoComparator implements Comparator<Asmuo>
{
public int compare(Asmuo p1, Asmuo p2)
{
return p1.pavarde.compareToIgnoreCase(p2.pavarde);
// I'm assuming pavarde is the surname?
}
}
Sarasas类{
...
私有列表分类列表(){
//将列表转储到ArrayList中
列表数据=新的ArrayList();
Irasas node=p;//从Sarasas对象的头节点开始
while(节点!=null){
数据添加(节点);
node=node.kitas;
}
//给你的名单排序
Collections.sort(数据,新的asmuoparator());
返回数据;
}
类AsmuoComparator实现Comparator
{
公共整数比较(Asmuo p1、Asmuo p2)
{
返回p1.pavarde.compareTignoreCase(p2.pavarde);
//我猜帕瓦德是姓?
}
}
现在,您可以根据需要使用返回的列表。要按顺序遍历列表并对每个项目执行操作,请执行以下操作:
List<Asmuo> data = sortList();
for (Asmuo a : data) {
// write to file, etc...
}
List data=sortList();
用于(Asmuo a:数据){
//写入文件等。。。
}
祝你好运!如果我的任何假设是错误的,请告诉我,这样我就可以修改我的答案。虽然我对这段代码没有具体的评论,但坦率地说,鉴于我对您使用的语言缺乏理解,我发现阅读起来非常困难,作为一种通用方法,这就是我解决您所问问题的方法:
在这个类中,您可以比较名称以检查顺序。您还可以使用java String方法compare或compareIgnoreCase让java为您进行名称比较
顺便说一句,这适用于任何java对象类型,排序方法可以是完全任意的,或者基于数据的某些新特性。我经常使用这种方法,因为java为您完成了大部分繁重的工作,它可以最大限度地减少您的时间和精力投入。当java成为lready有一个很好的代码供您使用。虽然我对这段代码没有具体的评论,因为坦率地说,由于我对您使用的语言缺乏理解,我发现阅读起来非常困难,作为一种通用方法,这就是我将如何解决您提出的问题:
在这个类中,您可以比较名称以检查顺序。您还可以使用java String方法compare或compareIgnoreCase让java为您进行名称比较