Как удалить строку, если переменная пуста - PullRequest
0 голосов
/ 15 января 2019

В настоящее время я учусь печатать текстовую область с данными внутри, но у меня возникают проблемы при попытке найти способ удаления строк с пустыми значениями

    String color1 = "";
    String color2 = "";
    String color3 = "";
    String color4 = "";
    String color5 = "";
    String color6 = "";
    String color7 = "";
    String color8 = "";
    int weight1 = 0;
    int weight2 = 0;
    int weight3 = 0;
    int weight4 = 0;
    int weight5 = 0;
    int weight6 = 0;
    int weight7 = 0;
    int weight8 = 0;


    TextArea.setText("COLOR\t\t:\t WEIGHT:" + 
            "\n=====================================\n" +
            color1 +"\t\t\t "+ weight1 + "\n" +
            color2 +"\t\t\t "+ weight2 + "\n" +
            color3 +"\t\t\t "+ weight3 + "\n" +
            color4 +"\t\t\t "+ weight4 + "\n" +
            color5 +"\t\t\t "+ weight5 + "\n" +
            color6 +"\t\t\t "+ weight6 + "\n" +
            color7 +"\t\t\t "+ weight7 + "\n" +
            color8 +"\t\t\t "+ weight8 );
}

Обычно значение имеют только color1 и color2 с их весами, очень редко оно достигает color8. Хотя цвет8 и его вес не имеют значения, как я могу убедиться, что он не отображается в текстовой области, только если он имеет значение?

Ответы [ 5 ]

0 голосов
/ 15 января 2019

Попробуйте вот так

List<String> colors = new ArrayList<>();
List<Integer> weights = new ArrayList<>();

String text = "COLOR\t\t:\t WEIGHT:" + 
          "\n=====================================";
if (!colors.isEmpty() && !weights.isEmpty()) {
  for (String color : colors) {
      if (weights.get(colors.indexOf(color) != null) {
         text = text + "\n" + color +"\t\t\t "+ weights.get(colors.indexOf(color));
      }
  }
}

TextArea.setText(text);
0 голосов
/ 15 января 2019
public static void main(String[] args) {
            String color1 = "";
            String color2 = "";
            String color3 = "";
            String color4 = "";
            String color5 = "";
            String color6 = "";
            String color7 = "";
            String color8 = "";
            int weight1 = 0;
            int weight2 = 0;
            int weight3 = 0;
            int weight4 = 0;
            int weight5 = 0;
            int weight6 = 0;
            int weight7 = 0;
            int weight8 = 0;

            List<String> colors= Arrays.asList(color1, color2 , color3 , color4 , color5 , color6 , color7 , color8);
            List<String> colors2=  colors.stream().filter(p -> colors.isEmpty()).collect(Collectors.toList());

            List<Integer> weights = Arrays.asList(weight1, weight2, weight3, weight4, weight5, weight6, weight7, weight8);

            stamp(colors2,weights);

    }

   private static void  stamp (List<String> colors, List<Integer> weights) {


       String header ="COLOR\t\t:\t WEIGHT:" + 
            "\n=====================================\n";

       String row = "";
       int i = 0;
       for (String color : colors) {
           row = row + color +"\t\t\t "+ weights.get(i)+ "\n";
           i++;
       }
        System.out.println(header+row);
   }
0 голосов
/ 15 января 2019

Я полагаю, что вы должны иметь массив значений и использовать метод, подобный следующему, где вы проверяете, существует ли цвет, если да, то добавьте к выводу.

int index=0;
StringBuilder result=new StringBuilder();
while(index<colors.length && Strings.isNotEmpty(colors[index]){
   result.append(colors[index]);
   result.append(DELIMITER); // \t\t\t 
   result.append(weights[index]);
   result.append("\n");
}
return result;
0 голосов
/ 15 января 2019

Если вы не хотите использовать массивы для цветов, вы можете проверить, является ли каждый цвет пустой строкой:

TextArea.setText("COLOR\t\t:\t WEIGHT:" + 
            "\n=====================================\n" +
            !color1.equals("")?color1 +"\t\t\t "+ weight1 + "\n" +:"";
            !color2.equals("")?color2 +"\t\t\t "+ weight2 + "\n" +:"";
            !color3.equals("")?color3 +"\t\t\t "+ weight3 + "\n" +:"";
            !color4.equals("")?color4 +"\t\t\t "+ weight4 + "\n" +:"";
            !color5.equals("")?color5 +"\t\t\t "+ weight5 + "\n" +:"";
            !color6.equals("")?color6 +"\t\t\t "+ weight6 + "\n" +:"";
            !color7.equals("")?color7 +"\t\t\t "+ weight7 + "\n" +:"";
            !color8.equals("")?color8 +"\t\t\t "+ weight8:""; );
0 голосов
/ 15 января 2019

Вы можете хранить цвета и веса в LinkedHashMap, но вставлять только те значения, которым присвоен вес. Затем вы можете конвертировать записи в String:

LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
map.put("white", 2);
map.put("red", 1);

String text = map.entrySet()
                 .stream()
                 .map(e -> e.getKey() + "\t\t\t " + e.getValue() + "\n")
                 .collect(Collectors.joining());
System.out.println(text);
...