2012-05-09 7 views
1

Javaの文字列全体から文字列変数を取得する方法。私はこのString sから名前、年齢、性別を得ることができる方法どのように文字列変数を特定の文字列から取得することができます

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

:私はこの方法で作成された文字列を与えられていた場合

getWord(position)などを使用することはできません。なぜなら、名前に何語あり、どのように年齢が表されるのかわからないからです。 年齢= "22歳"または年齢= "22歳5ヶ月" 。

+0

すべての「変数」は、大きな文字で始まるのか? –

+1

フィールド間に区切り文字がない場合、これは乱雑です... –

+0

正規表現を試してください。 –

答えて

2

を呼び出すことができます私はあなたがNameAgeSex","文字で分割さ持つことが示唆されました。

それは意味:そして、あなたは、変数のプロパティから次に文字列s

String properties = s.split(","); 

「」によって分割することができます

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

、あなたがプロパティ名と値を取るために":"によって分割することができますそのプロパティの。

これは明確ですか?あなたが望んでいたよう

私は別の方法をサポートするために、より多くのコードを追加している:

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

あなたは4つの続く文字「AGE:」で遭遇するまで名前を( "NAME:"の後に)読んでから、あなたが4つの後続の文字で遭遇するまで読み続けるでしょう。 "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

を利用して、それ以外の場合は、文字列の配列にそれらを分割することは不可能であろう、作成された文字列の上の適切な区切り文字があるはずです。例えば

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

あなたのために働きます。あなたはあなたのために変更できます。

update:これは空白であっても、空白でNameと.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); 
関連する問題