Javaで文字列全体から文字列変数を取得する方法。
この方法で作成された文字列が与えられた場合:
String s = "Name:" + name + "Age:" + age + "Sex:" + sex;
この文字列から名前、年齢、性別を取得するにはどうすればよいですか。
名前にいくつの単語が含まれるか、年齢が「22歳」または「22歳5か月」でどのように表されるかわからないため、getWord(position)などを使用できません。
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);
これは単なる例であり、ロジックを示していることに注意してください。自分でリファクタリングする必要があります。
次の4文字の「AGE:」に遭遇するまで(もちろん「NAME:」の後に)名前を読み続け、次に4つの後続の文字「SEX:」に遭遇するまで年齢を読み続けます。性別データです。
編集:実際には、「:」がデータに含まれていない場合は、区切り文字になる可能性があります。
区切り文字がある場合は、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];
「スプリット」を活用
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] );
}
作成された文字列には適切な区切り文字が必要です。そうでない場合、文字列の配列に分割することはできません。
例えば:
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;
正規表現を使用することをお勧めします。サンプルコードは次のとおりです。
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));
}
あなたのために働きます。あなたはあなたのために変更を行うことができます。
更新:これは、名前と名前の間にスペースがあるかどうかに関係なく機能します。スペースには関係なく、区切り文字を使用する必要はありません。
次のコードを使用できます。
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);