0

何らかの理由で、プロジェクトで特定の文字列を使用する必要があります。これはテキスト ファイルです (JSON ファイルです)。

{"algorithm": 
[
    { "key": "onGapLeft", "value" : "moveLeft" },
    { "key": "onGapFront", "value" : "moveForward" },
    { "key": "onGapRight", "value" : "moveRight" },
    { "key": "default", "value" : "moveBackward" }
]
}

次のようにJAVAで定義しました。

static String input = "{\"algorithm\": \n"+
"[ \n" +
    "{ \"key\": \"onGapLeft\", \"value\" : \"moveLeft\" }, \n" +
    "{ \"key\": \"onGapFront\", \"value\" : \"moveForward\" }, \n" +
    "{ \"key\": \"onGapRight\", \"value\" : \"moveRight\" }, \n" +
    "{ \"key\": \"default\", \"value\" : \"moveBackward\" } \n" +
"] \n" +
"}";

次に、配列内のキーと値を分離する必要があります。

key[0] = onGapLeft; value[0] = moveLeft;
key[1] = onGapFront; value[1] = moveForward;
key[2] = onGapRight; value[2] = moveRight;
key[3] = default; value[3] = moveBackward;

私は Java が初めてで、文字列クラスがよくわかりません。その結果を得る簡単な方法はありますか?あなたは本当に私を助けるでしょう!

ありがとう!

更新: 説明が不十分でした、申し訳ありません。このプログラムは LEGO NXT ロボットで実行されます。そこでは JSON がうまく機能しないので、この JSON ファイルを通常の STRING として解釈する必要があります。私が欲しいものを説明してくれることを願っています:)

4

2 に答える 2

2

いくつかのステップで解決策を提案します。

1) ~JSON 文字列のさまざまな部分を取得しましょう。パターンを使用して、さまざまな{.*}パーツを取得します。

public static void main(String[] args) throws Exception{
  List<String> lines = new ArrayList<String>();

  Pattern p = Pattern.compile("\\{.*\\}");
  Matcher matcher = p.matcher(input);
  while (matcher.find()) {
    lines.add(matcher.group());
  }
}

( PatternMatcherを見てください)

現在、lines4 つの文字列が含まれています。

{ "key": "onGapLeft", "value" : "moveLeft" }
{ "key": "onGapFront", "value" : "moveForward" }
{ "key": "onGapRight", "value" : "moveRight" }
{ "key": "default", "value" : "moveBackward" }

これらのいずれかのような文字列が与えられた場合、中かっこを次の呼び出しで削除できます。String#replaceAll();

List<String> cleanLines = new ArrayList<String>();
for(String line : lines) {
  //replace curly brackets with... nothing.
  //added a call to trim() in order to remove whitespace characters.
  cleanLines.add(line.replaceAll("[{}]","").trim());
}

( String String#replaceAll(String regex)をご覧ください)

今、cleanLines含まれています:

"key": "onGapLeft", "value" : "moveLeft"
"key": "onGapFront", "value" : "moveForward"
"key": "onGapRight", "value" : "moveRight"
"key": "default", "value" : "moveBackward"

2)これらの行の 1 つを解析しましょう:

次のような行が与えられます:

"key": "onGapLeft", "value" : "moveLeft"

,String#split() を使用して文字で分割できます。2 つの要素を含む String[] が得られます。

//parts[0] = "key": "onGapLeft"
//parts[1] = "value" : "moveLeft"
String[] parts = line.split(",");

( String[] String#split(String regex)を見てください)

これらの部分をきれいにして ("" を削除)、いくつかの変数に割り当てましょう。

String keyStr = parts[0].replaceAll("\"","").trim(); //Now, key = key: onGapLeft
String valueStr = parts[1].replaceAll("\"","").trim();//Now, value = value : moveLeft

//Then, you split `key: onGapLeft` with character `:`
String key = keyStr.split(":")[1].trim();

//And the same for `value : moveLeft` : 
String value = valueStr.split(":")[1].trim();

それでおしまい !

正規表現に関する Oracle のチュートリアルも参照する必要があります(これは非常に重要であり、時間を費やす必要があります)。

于 2013-09-09T17:32:02.680 に答える