2017-03-11 4 views
0

Javaの文字列を解析するのに助けが必要です...私はJavaにはとても新しいので、どうやって動くのか分かりません。Javaで文字列を解析してから変数に格納する

は、私が解析したい文字列が...

文字列str = "; 49.21716; -122.667252; 49.216757、-122.666235; NC43-EB2" であると仮定します

私は何をしたいと思うことはある:

文字列名= C43

文字列の方向= EB2。私がやりたいものを次に

は店でペアとして2点の座標...

座標C1 = 49.21716; -122.667252。座標c2 = 49.216757; -122.666235;

次に、リストを作成してc1とc2を保存します。

は、これまでのところ、私はこれがあります。

parseOnePattern(String str)文字{

文字列toParse = STR。

name = toParse.substring(1, toParse.indexOf("-")); 
    direction = toParse.substring(toParse.indexOf("-", toParse.indexOf(";"))); 

私は前方に移動するかどうかはわかりません。どんな助けもありがとう。

+2

データの一貫性に応じて、正規表現を調べることができます。この問題はJSONと何が関係していますか?あなたの文字列はJSON形式ではありません。それ以外の場合は、JSON Parser APIを使用します:http://www.oracle.com/technetwork/articles/java/json-1973242html –

+0

JSONとは関係ないことに、私は私の答えを編集しました....各座標をペアとして格納するための正規表現を開発したいのですが、どうすればそれをやりますか?私はすべての2番目の座標が " - "で始まることに気づいています。おそらくそれは助けになるかもしれません。 私は使用する各座標を分けると思った。 String [] result = s.split( ";"); – user7696456

+0

あなたの問題を解決するならば、あなたは分割に関して適切な回答を得ているようですが、あなたは良いです(解決したものとしてマークしてください)。正規表現パターンを開始し、それを実装する前に試してみたいと思っているなら、https://regex101.com/をチェックしてください。私はそのサイトが大好きです。 Javaの正規表現のチュートリアルが必要な場合は、Googleを通じて十分に見つけることができます。 –

答えて

0

単純な部分文字列関数は、問題を解決する場合があります。

String str = "NC43-EB2;49.21716;-122.667252;49.216757;-122.666235;"; 
    String[]s = str.split(";"); 
    String[]n = s[0].split("-"); 

    String name = n[0].substring(1);  
    String direction = n[1]; 

    String c1 = s[1] +";"+s[2];   
    String c2 = s[3] +";"+s[4]; 

    System.out.println(name + " " + direction); 
    System.out.println(c1 + " " + c2); 

私はこれがあなたを助け願っています。私はこれを作った

0
String str3 = "NC43-EB2;49.21716;-122.667252;49.216757;-122.666235;"; 
String sub = str3.substring(0,4); // sub = NC43 
String sub4 = str3.substring(5,9); // sub = EB2; 

HashMap<String, String> hm = new HashMap<>(); 
hm.put(str3.substring(9 ,30), str3.substring(30)); 

hm.forEach((lat, lot) -> { 
    System.out.println(lat + " - " + lot); // 49.21716;-122.667252; - 49.216757;-122.666235; 
}); 

//edit if using an array non pairs (I assumed it was lat + lon) 
List<String> coordList = new ArrayList<>(); 
coordList.add(str3.substring(9 ,30)); 
coordList.add(str3.substring(30)); 

coordList.forEach(coord -> { 
    System.out.println(coord); 
}); 

//output : 49.21716;-122.667252; 
      49.216757;-122.666235; 
+0

私は指定された4つの値よりも多くのデータを持っていますので、これは大量のデータbcuzのためにこれを実装するのが良いとは思わないので、部分文字列メソッドの特定の値を指定しています。思う? – user7696456

+0

文字列の長さが同じかどうかによって異なります。私は彼らがそうすると思った。あなたが独自のメソッドを書くことができるので、データの量は問題ありません。それは分割を行います。次に、各文字列についてループします。 – Eclipse

0

Javaおよび操作のすべてのセットが、文字列で実行できるようになりました。

public void breakString() { 
    String str = "NC43-EB2;49.21716;-122.667252;49.216757;-122.666235"; 
    // Will break str to "NC43-EB2" and "49.21716" "-122.667252" "49.216757" "-122.666235" 
    String [] allValues = str.split(";", -1); 
    String [] nameValuePair = allValues[0].split("-"); 
    // substring selects only the specified portion of string 
    String name = nameValuePair[0].substring(1, 4); 

    // Since "49.21716" is of type String, we may need it to parse it to data type double if we want to do operations like numeric operations 
    double c1 = 0d; 
    try { 
    c1 = Double.parseDouble(allValues[1]); 
    } catch (NumberFormatException e) { 
     // TODO: Take corrective measures or simply log the error 
    } 

私はあなたがStringクラスのドキュメントを通過することです示唆している何を学ぶ - :あなたが実行する操作の全体のセットを持って、私はあなたが始めたそのうちのいくつかを実行して取得するためのコードを提供しますストリングの分割やあるデータ型の別のデータ型への変換や、Eclipseのような非常に便利な機能を持つIDEの使用などの操作について詳しく説明します。また、私は上記のコードをテストしていないので、テンプレートとしてではなく参照として使用してください。

+0

ありがとうございます、これは非常に参考になりますが、splitメソッドで-1パラメータが意味することは何ですか(私はそれが限界であることを知っていますが、どういう意味ですか)また、指定したコードのどこにどのように座標を解析するのですか?(そしてそうです、私は各文字列の座標を2倍に解析する必要があります)。 – user7696456

+0

ここにはドキュメントの直接引用があります - limitパラメータはパターンが適用される回数を制御し、結果として得られる配列の長さに影響します。 f nが正でない場合、パターンはできるだけ多くの回数適用され、配列の長さは任意です。 nが0の場合、パターンはできるだけ多くの回数適用され、配列の長さは任意で、後続の空の文字列は破棄されます。 – opensam

+0

座標は、JavaではCoordinatesクラスが構築されていません。ポイントと呼ばれる1つの不明なクラスがありますが、私はあなたがそれを望むとは思わない。おそらく、メンバー変数としてlat/longを使用して独自のカスタムCoordinatesクラスを作成し、この2つの値をそれらに格納する必要があります。 Javaでクラスを探してみてください – opensam

0

OK:

public static void main(String[] args) { 

    String str = "NC43-EB2;49.21716;-122.667252;49.216757;-122.666235;"; 

    String[] strSplit = str.split(";"); 
    String[] nameSplit=strSplit[0].split("-"); 
    String name=nameSplit[0].replace("N", ""); 
    String direction= nameSplit[1]; 
    String cordanateOne = strSplit[1]+";"+strSplit[2]+";"; 
    String cordanateTwo = strSplit[3]+";"+strSplit[4]+";"; 

     System.out.println("Name: "+name); 
     System.out.println("Direction: "+direction); 
     System.out.println("Cordenate One: "+cordanateOne); 
     System.out.println("Cordenate Two: "+cordanateTwo); 

} 


Name: C43 

方向:EB2 Cordenateワン:49.21716; -122.667252。 コードネート2:49.216757; -122.666235;

関連する問題