2017-11-25 19 views
0

私はしばらくの間試してきました。私は型から(大文字かどうかに関わらず)データを数値に抽出したい。私はモデルや誕生日を各行で取り除こうとしていますが、それはさらに難しくなります。それはすべて1つの文字列です。私は読みやすくするためにそれを間隔を置いて配置しました。フレーズを最初から最後まで削除するには

私はREGEX javaで答えを見つけようとしています。 [;]これは私がしようとしていたけど、最初の数(4,66)

後の進路文字列全体を削除されたものである。[MO] *

は、事前にありがとうございます!

入力:

Type:Carro;high:4,66;model:fourDoors;birthday:01/01/1980 

type:Truck;high:5,66;model:twoDoors;birthday:29/05/1977 

tYpe:motorcycle;high:1,55;model:fiveDoors;birthday:01/01/1980 

type:Carro;high:4,66;type:model;birthday:6/12/1887 

type:Carro;high:9,66;model:Doors;birthday:05/12/2010 

予想される出力:

Type:Carro;high:4,66 

type:Truck;high:5,66 

tYpe:motorcycle;high:1,55 

type:Carro;high:4,66 

type:Carro;high:9,66 
+0

あなたが望むものを達成しようとしたコードを投稿してください。 – LuisFerrolho

+0

これは私が使用しようとしていた正規表現ですが、もちろん – cubila

+0

の後に完全な文字列を削除していますUnixスタイルの行末がないのは確実ですか? Windowsのメモ帳には改行が表示されません。それは物事を楽にするでしょう。 –

答えて

0

これはうまくいきます。このコードを少し小さくするにはいくつかの方法がありますが、これは少なくともあなたを正しい道に導く助けとなるはずです。

私はそれをメインメソッドに入れましたが、それを独自の関数に入れるのは簡単でしょう。これにより、任意の数の配列を渡すことができます。

私はコード内のコメントですべてのロジックを追加し、私はそれが役に立てば幸い:

public static void main(String[] args) { 

    /*Get your strings into an Array*/ 
    String[] str = {"Type:Carro;high:4,66;model:fourDoors;birthday:01/01/1980", 
        "type:Truck;high:5,66;model:twoDoors;birthday:29/05/1977", 
        "tYpe:motorcycle;high:1,55;model:fiveDoors;birthday:01/01/1980", 
        "type:Carro;high:4,66;type:model;birthday:6/12/1887", 
        "type:Carro;high:9,66;model:Doors;birthday:05/12/2010", 
        "Expected OutPut:", 
        "Type:Carro;high:4,66", 
        "type:Truck;high:5,66", 
        "tYpe:motorcycle;high:1,55", 
        "type:Carro;high:4,66", 
        "type:Carro;high:9,66" 
    }; 
    /*Create a "final staging" array*/ 
    String[] newStr = new String[str.length - 1]; 

    for (int j = 0; j < str.length - 1; j++) {//For each of your strings 
     str[j] = str[j].toLowerCase();//set the string to lower 

     /*If they don't contain a semi-colon and a model or birthday reference go to else*/ 
     if (str[j].contains(";") && str[j].contains("model") || str[j].contains("birthday")) { 
      /*Otherwise, split the string by semi-colon*/ 
      String[] sParts = str[j].split(";"); 

      String newString = "";//the new string that will be created 

      for (int i = 0; i < sParts.length - 1; i++) {//for each part of the sParts array 

       if (sParts[i].contains("model") || sParts[i].contains("birthday")) {//if it contains what is not desired 
        //Do Nothing 
       } else { 
        newString += sParts[i];//otherwise concatenate it to the newString 
       } 

       newStr[j] = newString;//add the string to the "final staging" array 
      } 
     } else { 

      newStr[j] = str[j];//if it didn't have semi-colons and birthday or model, just add it to the "final staging" array 

     } 

    } 

    for (String newS : newStr) {// finally if you want to see the "final staging" array data... output it. 

     System.out.println(newS); 

    } 

} 

OUTPUT

type:carrohigh:4,66 
type:truckhigh:5,66 
type:motorcyclehigh:1,55 
type:carrohigh:4,66 
type:carrohigh:9,66 
expected output: 
type:carro;high:4,66 
type:truck;high:5,66 
type:motorcycle;high:1,55 
type:carro;high:4,66 

私は要件で何かを欠場することが起こった場合私に教えてください、私はそれを修正することを嬉しく思っています。

+0

lol。それは完璧に動作していますが、何を推測しますか? String [] myArr = {...}の配列を渡すと、それは動作しますが、ArrayListを配列に変換して渡すと動作しない場合は、それを参照してください。 String [] myArr = myArrayList.stream()。toArray(String [] :: new); – cubila

+0

それは私のために働いた。私は "myArrayList"を次のように定義していたので、結果が異なるかもしれません:List myArrayList = new ArrayList <>();あなたがこれを行うことができない場合は、オブジェクトを文字列にキャストするスクリプトを作成できます。 – SynchroDynamic

-1

文字列str =「タイプ:カルロ;高:4,66;モデル:fourDoors;誕生日:01/01/1980、タイプ車高:5,66;モデル:twoDoors;誕生日:29/05/1977年、tYpe:オートバイ;最高:1,55;モデル:fiveDoors;誕生日:01/01/1980、タイプ:Carro、最高:4 、66;タイプ:モデル;誕生日:1812年6月12日 ";

StringTokenizer tokens = new StringTokenizer(str, ","); 
while (tokens.hasMoreTokens()) { 
    String token = tokens.nextToken() ; 

    StringTokenizer tokens2 = new StringTokenizer(token, ":"); 
    while (tokens2.hasMoreTokens()) { 
     String key = tokens2.nextToken() ; 
     if (key.equalsIgnoreCase("type")){ 
      System.out.println("locate: "+key+"\n"); 
     } 
    } 

} 
+0

あなたがしたこと、あなたのやり方、そしてなぜそれが手元の問題を解決するのかについて、何らかのドキュメントを提供することは良い考えです。 –

関連する問題