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