java stringbuilder 删除一行
java stringbuilder deleting a line
所以我有这个问题。我使用过 StringBuilder,我正在尝试使用 JOptionPane 创建一个显示函数,该函数将显示员工的姓名和工资。每次从系统中删除员工姓名时,显示功能也必须删除一行,因为我不想在我的 JOptionPane 框中有空行。但是,我无法让它正确显示,因为当我尝试删除员工姓名时,它会删除自己的员工姓名,以及列表中它之前的所有员工姓名。 staffDetails 是一个单独的数组,其中包含员工的姓名和工资。
这是我显示员工的代码:
public static StringBuilder staffRecord= new StringBuilder();
public static void displayrezStaffRecord(){
int staffnumber=1;
for (int n=0;n<staffDetails.length;n++){
staffRecord.append(staffDetails[n].getStaffName());
staffRecord.append("\t ");
staffRecord.append(staffDetails[n].getPay());
staffRecord.append(" \n ");
staffnumber++;
if (staffDetails[n].getStaffName()==null){
menunumber--;
staffRecord.delete(0,staffRecord.length());
}
}
String finalresult= staffRecord.toString();
JOptionPane.showMessageDialog(null,"Staff_No Staff_Name Pay \n" +finalresult);
}
}
只需检查 null
并跳过此工作人员。 staffnumber
一开始应该是 0。此外,您不必使 StringBuilder
成为静态成员,只需创建新的 StringBuilder
。 (否则每次调用该方法都要清空)
public static void displayrezStaffRecord() {
int staffnumber = 0;
StringBuilder staffRecord= new StringBuilder();
for (int n = 0; n < staffDetails.length; n++) {
if (staffDetails[n].getStaffName() == null) {
menunumber--;
continue;
}
staffRecord.append(staffDetails[n].getStaffName());
staffRecord.append("\t ");
staffRecord.append(staffDetails[n].getPay());
staffRecord.append(" \n ");
staffnumber++;
}
String finalresult = staffRecord.toString();
JOptionPane.showMessageDialog(null, "Staff_No Staff_Name Pay \n" + finalresult);
}
不知道是不是因为你的代码不完整,没看到哪里用到变量staffnumber
。
我最好的建议是避免同时进行两项操作。在这里,您尝试过滤掉已删除的员工,同时将他们的数据附加到 StringBuilder
。理想情况下,我会先过滤掉员工,然后使用它们来创建我的 String
输出。考虑到这一点,您的方法将如下所示:
public static void display() {
StringBuilder builder = new StringBuilder();
List<Employee> filtered = Arrays.stream(employees)
.filter(employee -> employee.getName() == null)
.collect(Collectors.toList());
filtered.forEach(employee ->
builder.append(employee.getName())
.append("\t ")
.append(employee.getPay())
.append("\n "));
String output = builder.toString();
JOptionPane.showMessageDialog(null,"Staff_No Staff_Name Pay \n" + output);
}
假设您将员工存储在一个 Employees 数组中,我基本上会流式传输该数组,过滤掉所有名称为空的条目,将结果收集在一个列表中。
有了这个列表,我会继续使用 StringBuilder
来构建我的输出消息,以显示在对话框中。还要注意,我认为让 StringBuilder
成为 class 的静态成员没有任何意义。您可以在方法的上下文中使用它。
完成上述所有操作后,您将在这里执行两个截然不同的操作。一个是过滤掉所有不需要的条目,另一个是输出字符串的实际构造。
尝试只删除当前员工并在删除后减少员工人数,如您的 if 语句中的以下内容:
if (staffDetails[n].getStaffName()==null){
menunumber--;
staffRecord.delete(staffRecord.length()-4,staffRecord.length());
staffnumber--;
}
所以我有这个问题。我使用过 StringBuilder,我正在尝试使用 JOptionPane 创建一个显示函数,该函数将显示员工的姓名和工资。每次从系统中删除员工姓名时,显示功能也必须删除一行,因为我不想在我的 JOptionPane 框中有空行。但是,我无法让它正确显示,因为当我尝试删除员工姓名时,它会删除自己的员工姓名,以及列表中它之前的所有员工姓名。 staffDetails 是一个单独的数组,其中包含员工的姓名和工资。 这是我显示员工的代码:
public static StringBuilder staffRecord= new StringBuilder();
public static void displayrezStaffRecord(){
int staffnumber=1;
for (int n=0;n<staffDetails.length;n++){
staffRecord.append(staffDetails[n].getStaffName());
staffRecord.append("\t ");
staffRecord.append(staffDetails[n].getPay());
staffRecord.append(" \n ");
staffnumber++;
if (staffDetails[n].getStaffName()==null){
menunumber--;
staffRecord.delete(0,staffRecord.length());
}
}
String finalresult= staffRecord.toString();
JOptionPane.showMessageDialog(null,"Staff_No Staff_Name Pay \n" +finalresult);
}
}
只需检查 null
并跳过此工作人员。 staffnumber
一开始应该是 0。此外,您不必使 StringBuilder
成为静态成员,只需创建新的 StringBuilder
。 (否则每次调用该方法都要清空)
public static void displayrezStaffRecord() {
int staffnumber = 0;
StringBuilder staffRecord= new StringBuilder();
for (int n = 0; n < staffDetails.length; n++) {
if (staffDetails[n].getStaffName() == null) {
menunumber--;
continue;
}
staffRecord.append(staffDetails[n].getStaffName());
staffRecord.append("\t ");
staffRecord.append(staffDetails[n].getPay());
staffRecord.append(" \n ");
staffnumber++;
}
String finalresult = staffRecord.toString();
JOptionPane.showMessageDialog(null, "Staff_No Staff_Name Pay \n" + finalresult);
}
不知道是不是因为你的代码不完整,没看到哪里用到变量staffnumber
。
我最好的建议是避免同时进行两项操作。在这里,您尝试过滤掉已删除的员工,同时将他们的数据附加到 StringBuilder
。理想情况下,我会先过滤掉员工,然后使用它们来创建我的 String
输出。考虑到这一点,您的方法将如下所示:
public static void display() {
StringBuilder builder = new StringBuilder();
List<Employee> filtered = Arrays.stream(employees)
.filter(employee -> employee.getName() == null)
.collect(Collectors.toList());
filtered.forEach(employee ->
builder.append(employee.getName())
.append("\t ")
.append(employee.getPay())
.append("\n "));
String output = builder.toString();
JOptionPane.showMessageDialog(null,"Staff_No Staff_Name Pay \n" + output);
}
假设您将员工存储在一个 Employees 数组中,我基本上会流式传输该数组,过滤掉所有名称为空的条目,将结果收集在一个列表中。
有了这个列表,我会继续使用 StringBuilder
来构建我的输出消息,以显示在对话框中。还要注意,我认为让 StringBuilder
成为 class 的静态成员没有任何意义。您可以在方法的上下文中使用它。
完成上述所有操作后,您将在这里执行两个截然不同的操作。一个是过滤掉所有不需要的条目,另一个是输出字符串的实际构造。
尝试只删除当前员工并在删除后减少员工人数,如您的 if 语句中的以下内容:
if (staffDetails[n].getStaffName()==null){
menunumber--;
staffRecord.delete(staffRecord.length()-4,staffRecord.length());
staffnumber--;
}