在java数组中存储字符串

在java数组中存储字符串,java,android,Java,Android,我想知道是否可以在字符串数组中存储字符串变量? 我不能很好地解释这一点,但以下是我所做的: String st1 = "",st2 = "",st3 = "",st4 = ""; String[] str = {st1,st2,st3,st4}; 不幸的是,当我使用for循环时,str得到的是st1、st2和st3的值,而不是它本身的变量 这正是我想做的。。 每当一个数组有一个字符串数组时,例如: String[] containsValue = { "hi", "hello", "the

我想知道是否可以在字符串数组中存储字符串变量? 我不能很好地解释这一点,但以下是我所做的:

 String st1 = "",st2 = "",st3 = "",st4 = "";
 String[] str = {st1,st2,st3,st4};
不幸的是,当我使用for循环时,str得到的是st1、st2和st3的值,而不是它本身的变量

这正是我想做的。。 每当一个数组有一个字符串数组时,例如:

String[] containsValue = { "hi", "hello", "there" };

String strHi, strHello, strThere;
String[] getContainsValue = { strHi, strHello, strThere };

for (int x = 0; x < getContainsValue.length; x++) {
    getContainsValue[x] = containsValue[x];
}

The value of:
strHi = "hi"
strHello = "hello"
strThere = "there";
String[]containsValue={“hi”,“hello”,“there”};
字符串strHi,strello,strThere;
字符串[]getContainsValue={strHi,strello,strThere};
for(int x=0;x
基本上,我想把containsValue[]的值转换成3个字符串,即存储在getContainsValue[]中的strHi、strello和strThere。然后使用for循环将来自containsValue[]的值分配给它们。 这可能吗?如果是这样的话,你能给我一些格式怎么做?谢谢。

您可以使用
Map

Map Map=newhashmap();
地图放置(“strHi”、“hi”);
map.put(“strHello”,“hello”);
地图放置(“strThere”、“there”);
System.out.println(map.get(“strHello”);

最好的方法是使用映射和存储作为键值对

Map<String,String> myKVMap=new HashMap<String,String>();
myKVMap.put("strHi","value1");
myKVMap.put("strHello","value2");
myKVMap.put("strThere","value3");
Map myKVMap=newhashmap();
myKVMap.put(“strHi”、“value1”);
myKVMap.put(“strHello”、“value2”);
myKVMap.put(“strThere”、“value3”);

通过这种方式,您可以消除所有变量名称和值问题。

如果我理解您的问题,您希望能够通过首先在数组中查找规则字符串变量,然后进行赋值来赋值

我同意其他回应者的看法,如果你认为这种方法是必要的,那么这可能是不明智的。但本着纯粹问答的精神,以下是方法:

interface StringAssigner {
    void assign( String strValue );
}

// ...

String strHi, strHello, strThere;

StringAssigner[] asaGetContainsValue = {
    new StringAssigner() { @Override public void assign( String strValue ) { strHi = strValue; } },
    new StringAssigner() { @Override public void assign( String strValue ) { strHello = strValue; } },
    new StringAssigner() { @Override public void assign( String strValue ) { strThere = strValue; } }
};

// ...

for (int x = 0; x < asaGetContainsValue.length; x++) {
    asaGetContainsValue[x].assign( containsValue[x] );
}
接口字符串赋值器{
无效赋值(字符串strValue);
}
// ...
字符串strHi,strello,strThere;
StringAssigner[]AsageContainsValue={
new StringAssigner(){@Override public void assign(String strValue){strHi=strValue;}},
new StringAssigner(){@Override public void assign(String strValue){strHello=strValue;}},
new StringAssigner(){@Override public void assign(String strValue){strThere=strValue;}}
};
// ...
for(int x=0;x

说不就行了。

我同意这里的其他答案,这感觉像是一个解决问题的办法,但不知道这是什么,我无法提出更好的建议

不过,为了回答这个问题,您可以将字符串包装在简单类中,并将该类的对象引用存储在数组和
strHi
strello
strThere
中。这样,即使在类内更改string属性,类对象本身也不会更改,因此您将看到正在查找的行为


或者,您可以按照其他人的建议使用HashMap。在您的情况下,如果仍要使用
getContainsValue
数组,则可以存储键:

Map<String,String> map = new HashMap<String,String>();
map.put("strHi","");
map.put("strHello","");
map.put("strThere","");

String[] containsValue = { "hi", "hello", "there" };
String[] getContainsValue = { "strHi", "strHello", "strThere" };

for (int x = 0; x < getContainsValue.length; x++) {
    map.put(getContainsValue[x], containsValue[x]);
}
Map Map=newhashmap();
地图放置(“strHi”和“);
地图放置(“strHello”和“);
地图放置(“strThere”和“);
字符串[]包含值={“hi”,“hello”,“there”};
字符串[]getContainsValue={“strHi”、“strello”、“strThere”};
for(int x=0;x

然后,
map.get(“strHi”)
会像您期望的那样返回
“hi”

在Java中没有简单的方法来完成您想要做的事情。您需要的是操作员的C/C++地址(<代码>和代码> >)。或者Perl使用字符串作为变量名的能力。Java都不支持这两种方法

理论上,如果变量包含实例变量,则可以使用反射来访问和更新它们。但这样做的代码混乱、低效且脆弱。而且它不适用于局部变量


你最好找一个不同的解决方案;e、 如其他答案所示,使用地图


或者仅仅满足于一些笨重(但健壮且合理有效)的代码,它使用一个开关或一系列
if-else-if
测试和原始变量

我认为你应该像
Map
那样使用
Collection

Map用于以
键值
对的形式存储数据

假设在您的情况下,键是字符串,值也是字符串。

Map<String, String> mp = new Map<String, String>();

mp.put("str1","Hi");
mp.put("str2","Hello");

You can iterate over it like the below.

for(Map.Entry<String, String> ar : mp.entrySet()){

      System.out.println("Key: "+ar.getKey()+" :: "+"Value: "+ar.getValue());

 }
Map mp=newmap();
mp.put(“str1”、“Hi”);
下院议员put(“str2”,“你好”);
您可以像下面这样对其进行迭代。
对于(Map.Entry ar:mp.entrySet()){
System.out.println(“Key:+ar.getKey()+”::“+”值:+ar.getValue());
}

使用地图是个好主意。另一种方法是实例化类变量,然后分配值

public void testTransfer() {
    String containsValue[] = { "hi", "hello", "there" };
    Data strHi = new Data();
    Data strHello = new Data();
    Data strThere = new Data();
    Data[] getContainsValue = { strHi, strHello, strThere };
    for (int x = 0; x < getContainsValue.length; x++) {
        getContainsValue[x].value = containsValue[x];
    }
    // print out
    System.out.println(strHi.value);
    System.out.println(strHello.value);
    System.out.println(strThere.value);
}

class Data {
    private String value;
}
public void testTransfer(){
字符串包含值[]={“hi”,“hello”,“there”};
数据strHi=新数据();
Data strHello=新数据();
数据strThere=新数据();
数据[]getContainsValue={strHi,strello,strThere};
for(int x=0;x
您正在寻找的概念是“l值”。简单地说,当您使用变量时,您是在使用变量中包含的值,还是在谈论变量本身,以便可以在其中存储其他内容?您希望调用的数组
getContainsValue
具有
strHi
strello
strThere
的l值。不幸的是,在Java中无法做到这一点。使用
strHi
strHe初始化
getContainsValue
public void testTransfer() {
    String containsValue[] = { "hi", "hello", "there" };
    Data strHi = new Data();
    Data strHello = new Data();
    Data strThere = new Data();
    Data[] getContainsValue = { strHi, strHello, strThere };
    for (int x = 0; x < getContainsValue.length; x++) {
        getContainsValue[x].value = containsValue[x];
    }
    // print out
    System.out.println(strHi.value);
    System.out.println(strHello.value);
    System.out.println(strThere.value);
}

class Data {
    private String value;
}
int i = 17;
i = i + 1;
class MyContainer {
    String str;
    void setString(String s) { str = s; }
    String getString() { return str; }
}
String[] containsValue = { "hi", "hello", "there" };

MyContainer hiCont = new MyContainer();
MyContainer helloCont = new MyContainer();
MyContainer thereCont = new MyContainer();

MyContainer[] getContainsValue = { hiCont, helloCont, thereCont };

for (int x = 0; x < getContainsValue.length; x++) {
    getContainsValue[x].setString(containsValue[x]);
}
Map<String,String> map = new HashMap<String,String>();
String[] str = {"hi","hello","there"};

for(int x = 0; x < str.lenght;x++){
map.put(str[x],"something you want to store");

}
public enum EnumModifE {
    str1("1"), str2("2"), str3("3");
    String value;
    EnumModifE(final String s) {
        this.value = s;
    }
    public void setValue(final String s) {
        this.value = s;
    }
}
public class EnumModifM {
    public static void main(final String[] args) {
        for (final EnumModifE eme : EnumModifE.values()) {
            System.out.println(eme + "\t" + eme.value);
        }
        EnumModifE.str1.setValue("Hello");
        EnumModifE.str2.setValue("all");
        EnumModifE.str3.setValue("[wo]men");

        for (final EnumModifE eme : EnumModifE.values()) {
            System.out.println(eme + "\t" + eme.value);
        }
    }
}
str1    1
str2    2
str3    3
str1    Hello
str2    all
str3    [wo]men