2012-05-09 3 views
1

Как получить строковые переменные из целой строки в java.Как получить строковые переменные из заданной строки

если я даюсь строка, которая создается следующим образом:

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

, как я могу получить имя, возраст, пол из этой строки с.

Я не могу использовать getWord (позицию) или что-то в этом роде, потому что я не знаю, сколько слов будет там по имени, и как представлен возраст age = "22 years" or age = "22 years 5 months" ,

+0

ли каждая «переменная» начать с большой буквы? –

+1

Если у вас нет разделителей между вашими полями, это будет беспорядочно ... –

+0

попробуйте регулярное выражение. –

ответ

2

Я предлагаю вам иметь Name, Age и Sex расщепляется "," характер.

Это означает:

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] -> index [1] => свойство 1, index [1] -> index [2] => свойство 2 ... так далее ... – nnhthuan

1

Вы продолжите чтение имени (после «ИМЯ:« Конечно »), пока не встретитесь с четырьмя последующими буквами« ВОЗРАСТ: », а затем продолжайте читать возраст, пока не столкнетесь с четырьмя последующими буквами« СЕКС: », а остальные - данные по полу.

Редактировать: На самом деле «:» может быть вашим seperator, если он не включен в данные.

+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

Там должны быть соответствующие ограничители на созданной строки s, в противном случае было бы невозможно разделить их в массивы строк.

Например:

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)); 
} 

Будет работать для вас. Вы можете внести для вас изменения.

обновление: И это будет работать, даже если их пространства или нет между именем и. Не имеет значения в пробелах и не нужно использовать какой-либо разделитель.

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); 
Смежные вопросы