2012-05-09 144 views
1

如何从java中的整个字符串获取字符串变量。如何从给定的字符串获取字符串变量

,如果我给它创造了这样一个字符串:

String s = "Name:" + name + "Age:" + age + "Sex:" + sex; 

如何从这个一个String获取姓名,年龄,性别。

我不能使用getWord(位置)或类似的东西,因为我不知道有多少单词将在那里名称,以及如何代表年龄 年龄=“22岁”或年龄=“22年5个月” 。

+0

是否每个“变量”开始用大信? –

+1

如果你的字段之间没有分隔符,这将会是一团糟...... –

+0

尝试正则表达式。 –

回答

2

我建议你有NameAgeSex通过","性格分裂。

这意味着:

String s = "Name:" + name + ",Age:" + age + ",Sex:" + sex; 

然后你就可以通过拆分字符串s“”

String properties = s.split(","); 
从不同属性

然后,您可以通过":"拆取属性名和值的财产。

这是明确的吗?

我添加更多的代码来支持另一种方式,你想:

String name = "Thuan"; 
String age = "27"; 
String sex = "male"; 
String s = "Name:" + name + "Age:" + age + "Sex:" + sex; 

int nameIndex = s.indexOf("Name:"); 
int ageIndex = s.indexOf("Age:"); 
int sexIndex = s.indexOf("Sex:"); 

String theName = s.substring(nameIndex + "Name:".length(), ageIndex); 
String theAge = s.substring(ageIndex + "Age:".length(), sexIndex); 
String theSex = s.substring(sexIndex + "Sex:".length(), s.length()); 

System.out.println(theName); 
System.out.println(theAge); 
System.out.println(theSex); 

请注意,这仅仅是例子告诉你的逻辑,你需要重构自己。

+1

clear..thankyou ... \t 但有没有一种方法,我可以实现这一点,而不使用分隔符...因为我需要显示整个字符串以及它不会看起来很好用分隔符。 – Housefly

+0

是的。有。只需将您的属性名称定义为常量即可。尝试使用它们与s.startWiths和s.indexOf :)我想它会起作用。但需要很好地使用逻辑。 – nnhthuan

+0

例如:使用's.indexOf(“Name:”)',并且您有'Name:'的索引,对'Age:'和'Sex:'做同样的操作。你会有3个索引号码,对吗?然后你对它们进行升序排序。现在你可以通过索引[0] - >索引[1] =>属性1,索引[1] - >索引[2] =>属性2 ...等等来获取它。 – nnhthuan

1

你会继续阅读名字(在“NAME:”ofcourse之后),直到遇到四个后续字母“AGE:”,然后继续阅读该年龄,直到遇到四个后续字母“SEX: “其余的是性别数据。

编辑:其实“:”可能是你的分隔符,如果数据不包含它。

+0

根据问题,这可能是正确的方式来做到这一点,除非变量有特定的分隔符字符。我们假设“年龄”和“性别”这些词不允许出现在变量值的任何地方。 – maress

+0

@maress是的,当我编辑帖子时:如果数据中没有包含“:”,则用分隔符“:”分隔字符串会更容易。 – phantasmagoria

0

如果你有,你可以使用String.split()方法的分隔字符。 例如,有

s = "Name: carmelo; Age: 25 years; Sex: m;" 

,那么你可以调用

String[] values = s.split(";") 
String name = values[0].split(":")[1]; 
String age = values[1].split(":")[1]; 
String sex = values[2].split(":")[1]; 
+0

我想这个工程...将检查它...谢谢 – Housefly

+0

但有没有一种方法,我可以实现这一点,而不使用分隔符...因为我需要显示整个字符串以及...它不会看起来不错分隔符。 – Housefly

0

。利用“分割”的

String s = "Name:" + name + "#Age:" + age + "#Sex:" + sex; 
String[] splits = s.split("#"); 

System.out.println("splits.size: " + splits.length); 

for(int i=0; i < splits.length; i++){ 
//System.out.println(splits[i]); 
String[] values= splits[i].split(":"); 

System.out.println(values[0]+" = " + values[1]); 
} 
0

应该有在创建一个String适当的分隔符,否则就不可能将它们分割成字符串数组。

例如:

private static final String FIELD_DELIMITER = ";"; 
private static final String DATA_DELIMITER = "="; 

String s = "Name" + DATA_DELIMITER + name + FIELD_DELIMITER + 
      "Age" + DATA_DELIMITER + age + FIELD_DELIMITER + 
      "Sex" + DATA_DELIMITER + sex + FIELD_DELIMITER; 
0

我建议你使用正则表达式。您的示例代码是:

String s = "NAME : " + " abhi " + " Age : " + " 22 " + " Sex : " + " m "; 
Pattern pattern = Pattern.compile("NAME[\\s]*:[\\s]*(.*)[\\s]*Age[\\s]*:[\\s]*(.*)[\\s]*Sex[\\s]*:[\\s]*(.*)"); 
Matcher matcher = pattern.matcher(s); 
if (matcher.matches()) { 
    System.out.println("NAME : " + matcher.group(1) + " Age : " + matcher.group(2) + " Sex : " 
      + matcher.group(3)); 
} 

将为您工作。您可以为您做变更。

更新:这将工作,即使他们是空格或不在名称和.Doesnt问题上的空间,并不需要使用任何分隔符。

0

您可以使用代码如下:

String s = "Name:" + name + "Age:" + age + "Sex:" + sex; 
    int i = s.indexOf("Age:"); 
    int j = s.indexOf("Sex:"); 
    String Name = s.substring(0,i).split(":")[1]; 
    String Age = s.substring(i,j).split(":")[1]; 
    String Sex = s.substring(j).split(":")[1]; 
    System.out.println("Name="+Name+" Age="+Age+" Sex="+Sex); 
相关问题