3

だから私はこれらの4つの変数を持っています

private final String PROG_DEPT = "PROGRAMMING/ENGINEERING";
private final String DES_DEPT = "DESIGN/WRITING";
private final String ART_DEPT = "VISUAL ARTS";
private final String SOUND_DEPT = "AUDIO";

私ができるようにしたいのは、文字列を取得して変数と比較し、変数が等しい場合に変数に含まれるものを出力することです。

たとえば、私の文字列が「ART_DEPT」に等しい場合、ART_DEPT という変数があるかどうかを確認し、「VISUAL ARTS」を出力します。

2D文字列配列またはリストに入れることを考えていましたが、やりたいことをどのように行うかについてはよくわかりません

4

8 に答える 8

8

探しているデータ型はMap<String, String>.

Map<String, String> departmentNames = new HashMap<String, String>();
departmentNames.put("PROG_DEPT", "PROGRAMMING/ENGINEERING");
departmentNames.put("DES_DEPT", "DESIGN/WRITING");
//...etc...

//...

String dept = "PROG_DEPT";
String deptName = departmentNames.get(dept);
System.out.println(deptName); //outputs "PROGRAMMING/ENGINEERING"

は一意のMapキーを値にバインドします。この場合、両方とも typeStringです。を使用してバインディングを追加しput(key, value)、 を使用してキーのバインディングを取得しますget(key)

于 2013-08-20T05:12:28.170 に答える
5

私は列挙型で行きます:

package com.stackoverflow.so18327373;

public class App {
    public static void main(final String[] args) {
        final String in = "DES_DEPT";
        try {
            final Departement departement = Departement.valueOf(in);
            System.out.println(departement.getLabel());
        } catch (final IllegalArgumentException ex) {
            // in was not a known departement
            System.err.println("Bad value: " + in);
        }
    }

    public static enum Departement {
        PROG_DEPT("PROGRAMMING/ENGINEERING"), 
        DES_DEPT("DESIGN/WRITING"), 
        ART_DEPT("VISUAL ARTS"), 
        SOUND_DEPT("AUDIO");

        private final String label;

        private Departement(final String label) {
            this.label = label;
        }

        public String getLabel() {
            return this.label;
        }
    }
}

次に使用しますvalueOf()

于 2013-08-20T05:15:40.437 に答える
4

Mapなどの何らかの種類の を使用することをお勧めしますHashMap<String,String>MapインターフェイスとHashMapクラスの Javadoc を読むことをお勧めします。

于 2013-08-20T05:11:53.933 に答える
3

使用する必要があるのはマップです。

private final Map<String,String> myMap= new HashMap<String,String>() ;
{
    myMap.put("PROG_DEPT","PROGRAMMING/ENGINEERING");
    myMap.put("DES_DEPT","DESIGN/WRITING");
    myMap.put("ART_DEPT","VISUAL ARTS");
    myMap.put("SOUND_DEPT","AUDIO");
}

次に、次の方法で使用します。

String input= "ART_DEPT" ;
System.out.println( myMap.get(input) );
于 2013-08-20T05:11:48.863 に答える
1

これを試して

      List<String> list=new ArrayList<>();
      list.add("private final String PROG_DEPT = \"PROGRAMMING/ENGINEERING\";");
      list.add("private final String DES_DEPT = \"DESIGN/WRITING\";");
      list.add("private final String ART_DEPT = \"VISUAL ARTS\";");
      list.add("private final String SOUND_DEPT = \"AUDIO\";");
      String search="ART_DEPT";
      for (String i:list){
         if(i.contains(search)){
             System.out.println(i.split("=")[1].replaceAll(";",""));
         }
      }

ライブデモはこちら。Map を使用してこれを行うことができますが、そのためにはこれらの文字列からマップを作成する必要があります。

于 2013-08-20T05:17:31.313 に答える
1

リフレクションを探しているように聞こえます(または、クラス内の変数を検索する代わりに別のデータ型を使用したい場合はMap<String, String>)。Map アプローチは十分にカバーされているように見えるので、これは私にとって興味深いという理由だけで、ここにリフレクション アプローチがあります (これがこの問題を解決する最良の方法ではないというわけではありませんが、変数が存在するかどうかを確認してから取得するように要求したためです)。値です)

import java.lang.reflect.Field;

public class SOQuestion {
  private final String PROG_DEPT = "PROGRAMMING/ENGINEERING";
  private final String DES_DEPT = "DESIGN/WRITING";
  private final String ART_DEPT = "VISUAL ARTS";
  private final String SOUND_DEPT = "AUDIO";

  public static void main(String ... args) throws IllegalArgumentException, IllegalAccessException, InstantiationException {
    System.out.println(reflectValue("ART_DEPT", SOQuestion.class));
    System.out.println(reflectValue("COMP_DEPT", SOQuestion.class));
  }

  public static String reflectValue(String varible, Class thing) throws IllegalArgumentException, IllegalAccessException, InstantiationException {
    Field[] fs = thing.getDeclaredFields();
    for(int i = 0; i < fs.length; i++) {
      if(fs[i].getName().equals(varible)) {
        fs[i].setAccessible(true);
        return (String) fs[i].get(thing.newInstance());
      }
    }
    return null;
  }
}

印刷する最初の要求は印刷"ATR_DEPT"VISUAL ARTSれ、存在しないものへの 2 番目の要求は"COMP_DEPT"null を返します。

于 2013-08-20T05:11:55.640 に答える
1
private String getStaticFieldValue(String fieldName){
    String value = null;
    try {
        Field field = getClass().getDeclaredField(fieldName);
            if (Modifier.isStatic(field.getModifiers())){
                value = field.get(null).toString();
            }
        }
    catch (Exception e) {
        return null;
    }
    return value;
}

上記のようにいくつかのオプションがあります:

  1. Map を使用する場合、この場合にマップを使用することの欠点は、それを維持する必要があることです。つまり、最終的な静的フィールドの 1 つを追加/削除/編集する必要があるたびに、マップを編集する必要があります。同じように。
  2. この投稿で述べたようにリフレクションを使用します。これは私のお気に入りのソリューションです (上記のコード スニペット)
于 2013-08-20T05:56:54.110 に答える