Java 在映射对象中查找键/值并返回相应的值/键

Java 在映射对象中查找键/值并返回相应的值/键,java,android,Java,Android,我有一个地图对象,其键/值定义为美国州/首府(例如德克萨斯州/奥斯汀市) 当用户键入状态时,我需要返回资本;当用户键入资本时,我返回状态 我已经编写了以下代码,但它只在Capital->States比较中有效 知道怎么了吗 public class StatesCapitals extends AppCompatActivity { Map<String, String> capitals = new HashMap<>(); @Override

我有一个地图对象,其键/值定义为美国州/首府(例如德克萨斯州/奥斯汀市)

当用户键入状态时,我需要返回资本;当用户键入资本时,我返回状态

我已经编写了以下代码,但它只在Capital->States比较中有效

知道怎么了吗

public class StatesCapitals extends AppCompatActivity {

    Map<String, String> capitals = new HashMap<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_states_capitals);

        String text = "US_states"; //text file in the assets folder

        byte[] buffer = null;

        InputStream is;
        try {
            is = getAssets().open(text);
            int size = is.available(); //size of the file in bytes
            buffer = new byte[size]; //declare the size of the byte array with size of the file
            is.read(buffer); //read file
            is.close(); //close file

        } catch (IOException e) {
            e.printStackTrace();

        }

        // Store text file data in the string variable
        String str_data = new String(buffer);

        //Split using the delimiter ":" to the all elements
        String[] stateCapsArray = str_data.split(":");
        //Iterate over the array
        for(int i=0;i<stateCapsArray.length-1;i++) {
            //Skip each other element as we are collecting 2 elements at a time
            if(i%2 == 0) {
                String state = stateCapsArray[i];
                String capital = stateCapsArray[i+1];
                capitals.put(state, capital);
            }
        }

Toast.makeText(getBaseContext(), capitals.toString(), Toast.LENGTH_LONG).show();

    }

    public void doit(View v)
    {
        TextView result=(TextView)findViewById(R.id.textViewResult);
        EditText et=(EditText)findViewById(R.id.editText);
        String input=et.getText().toString();
        Toast.makeText(getBaseContext(), "Input: "+input, Toast.LENGTH_LONG).show();

        Iterator entries = capitals.entrySet().iterator();
        while (entries.hasNext()) {
            Map.Entry entry = (Map.Entry) entries.next();
            String key = (String)entry.getKey();
            String value = (String)entry.getValue();
            if (input.equals(key))
            {result.setText("The Capital of "+key+" is: "+value);}
            else if (input.equals(value)) {result.setText("The State of: "+value+" is: "+key);}
        }

    }

}
公共类StatesCapitals扩展了AppCompative活动{
Map capitals=newhashmap();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动、州和首都);
String text=“US_states”;//资产文件夹中的文本文件
字节[]缓冲区=空;
输入流为;
试一试{
is=getAssets().open(文本);
int size=is.available();//文件大小(字节)
buffer=new byte[size];//用文件大小声明字节数组的大小
is.read(buffer);//读取文件
is.close();//关闭文件
}捕获(IOE异常){
e、 printStackTrace();
}
//将文本文件数据存储在字符串变量中
字符串str_data=新字符串(缓冲区);
//使用分隔符“:”拆分所有元素
字符串[]stateCapsArray=str_data.split(“:”);
//迭代数组

对于(int i=0;i,问题似乎在循环中:

String[] stateCapsArray = str_data.split(":");
for(int i=0;i<stateCapsArray.length-1;i++) {
    //Skip each other element as we are collecting 2 elements at a time
    if(i%2 == 0) {
        String state = stateCapsArray[i];
        String capital = stateCapsArray[i+1];
        capitals.put(state, capital);
    }
}

主要的变化是,
i
在每次迭代中都会前进
2

文件中的数据是什么样子的?你能给我们举个例子吗?创建两个地图,每个方向一个,或者谷歌“阿拉巴马州:蒙哥马利:阿拉斯加州:朱诺:亚利桑那州:凤凰城:阿肯色州:小石城:加利福尼亚州:萨克拉门托:科罗拉多州:丹佛:康涅狄格州:哈特福德:特拉华州:多佛:佛罗里达州:塔拉哈西:佐治亚州:亚特兰大:谢谢。我在复制/粘贴输入文件时发现了错误。由于换行,出现了“”字符。我修复了输入。谢谢
for (int i = 0; i < stateCapsArray.length; i += 2) {
    String state = stateCapsArray[i];
    String capital = stateCapsArray[i+1];
    capitals.put(state, capital);
}