【问题标题】:Convert String to java.awt.Color将字符串转换为 java.awt.Color
【发布时间】:2017-10-04 17:06:43
【问题描述】:

我正在尝试将 String 对象转换为 java.awt.Color 对象。

我正在扫描用户的输入颜色。用户输入一种颜色,该颜色保存在String 中。我想将该颜色放入来自String 的颜色ArrayList 中。我该怎么做?

Scanner sc = new Scanner(System.in);
System.out.println("\nEnter your color\n" + 
                       "BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");

String str = sc.next();
str = str.toUpperCase();

private ArrayList<Color> colorArray= new ArrayList<Color>();

// Here I want to put the colors (string str) in the colorArray arraylist.

我如何做到这一点?

【问题讨论】:

  • 感谢所有反对票。但也许解释也是一个很好的姿态。
  • 您可以通过首先确定所需的逻辑步骤,然后将其转换为代码来实现它。当您不知道如何执行特定步骤时,您会进行研究(主要通过您选择的搜索引擎进行搜索),如果找不到答案,最后在这里提问。
  • 但是您使用的是java.awt.Color 还是自定义颜色类?如果是这样,那就展示它。
  • 我正在使用 java.awt.Color
  • 请查看 Map 和枚举。

标签: java string colors


【解决方案1】:

通过反思来做如何?

 Color color = (Color)Color.class.getField(str).get(null);
 colorArray.add(color);

如果用户输入的颜色不是 Color 类中的字段,您可能需要进行一些异常处理。

但是,请注意,此技术仅适用于 java.awt.Color 类为其提供静态实例成员的某些基本颜色。例如。 class 目前仅提供以下静态实例成员:

  • 黑色
  • 蓝色
  • 青色
  • darkGray 或 DARK_GRAY
  • lightGray 或 LIGHT_GRAY
  • 灰色
  • 绿色
  • 洋红色
  • 橙色
  • 粉红色
  • 红色
  • 白色
  • 黄色

对于绿松石等其他颜色,您必须使用适当的 RGB 组合构建Color 对象。

【讨论】:

    【解决方案2】:

    下面是一个示例,说明如何使用一点 Java 9 来做到这一点:

    public static void main(String[] args) throws ParseException, ClassNotFoundException {
        Scanner sc = new Scanner(System.in);
        System.out.println("\nEnter your color\n" +
                "BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");
    
        List<Color> colorArray= new ArrayList<>();
        Map<String, Color> colorMap = Map.ofEntries(entry("BLUE", Color.BLUE),
                entry( "BLACK", Color.BLACK),
                entry( "ORANGE", Color.ORANGE)); // TODO: add more colours
        while(sc.hasNext()) {
            String next = sc.next();
            Color c = colorMap.get(next);
            if(c == null) {
                if("END".equals(next)) {
                    break;
                }
                System.err.printf("Sorry, could not find %s%n", next);
            }
            else {
                colorArray.add(c);
                System.out.printf("Added %s%n", c);
            }
        }
        System.out.println(colorArray);
    }
    

    这是示例运行的输出:

    Enter your color
    BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:
    > BLUE
    Added java.awt.Color[r=0,g=0,b=255]
    > BLACK
    Added java.awt.Color[r=0,g=0,b=0]
    > ORANGE
    Added java.awt.Color[r=255,g=200,b=0]
    > END
    [java.awt.Color[r=0,g=0,b=255], java.awt.Color[r=0,g=0,b=0], java.awt.Color[r=255,g=200,b=0]]
    

    这是基于@VHS 想法使用反射的另一个版本:

    public static void main(String[] args) throws ParseException, ClassNotFoundException, IllegalAccessException {
        Scanner sc = new Scanner(System.in);
        System.out.println("\nEnter your color\n" +
                "BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");
        List<Color> colorArray= new ArrayList<>();
        Class<Color> colorClass = Color.class;
        while(sc.hasNext()) {
            String next = sc.next();
            try {
                Color c = colorClass.cast(colorClass.getField(next.toLowerCase()).get(null));
                colorArray.add(c);
                System.out.printf("Added %s%n", c);
            } catch (NoSuchFieldException e) {
                if("END".equals(next)) {
                    break;
                }
                System.err.printf("Sorry, could not find %s%n", next);
            }
        }
        System.out.println(colorArray);
    }
    

    理想情况下,您应该结合这两种想法(使用贴图和反射),以便支持 java.awt.Color 中声明的颜色 + 未声明的颜色。

    【讨论】:

      【解决方案3】:
      public class TestProj {
      
          public static void main (String[] args)throws IOException {
              List<Color> colorArray= new ArrayList<Color>();
              Scanner sc = new Scanner(System.in);
              System.out.println("\nEnter your color\n" + 
                                     "BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");
      
              while(sc.hasNext()){
                  String str = sc.next();
                  str = str.toUpperCase();
                  colorArray.add(new Color(str));
              }
              System.out.println("Array size: " + colorArray.size());
          }
      
          static class Color {
              private String color;
      
              public Color(String color){
                  setColor(color);
              }
      
              public String getColor() {
                  return color;
              }
      
              public void setColor(String color) {
                  this.color = color;
                  System.out.println(color);
              }
      
      
      
          }
      
      }
      

      我的输出是(Ctrl-Z 终止循环): 输入你的颜色 蓝色、黑色、橙色、白色、黄色、红色、绿色、粉色:

      蓝黑橙

      蓝色

      黑色

      橙色

      数组大小:3

      【讨论】:

        猜你喜欢
        • 2016-12-28
        • 2019-10-10
        • 2019-01-05
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多