コード行を取得して配列リストに入れ、そのリストを返すこの関数を作成しました。 問題は、コードをデバッグしたときに文字列をリストに入力しようとすると、挿入されたものが-[[Ljava.lang.String;@ 1786f9d5]-これを修正するにはどうすればよいですか? 私のコードは:
public static List<String[]> GetAll(String st){
String[] list = st.split("bags contain | contain |bags, | bag, | bags\\.| bag\\.");//ways to split it-shouldn't be changed
List<String[]> newlist = new ArrayList<>();
for (int i = 1; i < list.length; ++i) {
if (!list[i].equals("no other")) {
int n = Integer.parseInt(list[i].split(" | \\s")[0]);
for (int j = 0; j < n; ++j) {
newlist.add(list[i].split(" \\s[0-9],\\s "));//here is the problem I think when I try to remove the number from the string
}
}
}
if(newlist.size()>1) {
return newlist;
}
return new ArrayList<>();
}
public static void main(String[] args) {
HashMap<String,List<String[]>> hm = new HashMap<>();// can kinda ignore the hashmap
String input=reader.nextLine();
while(!input.equals("-1")){
hm.put(GetName(input),GetAll(input));
input=reader.nextLine();
}
}
いくつかの例では、新しい文字列の各行、最初のいくつかの単語も無視する必要があります。
サイドノート。ここでは、「shade/name color」(「contain」の前の文字列の先頭)は関係ないため、関数全体でスキップする必要があります。つまり、返される配列リストに「shade/namecolor」は表示されません。
ここでは「鈍い藍」は関係ないので、関数全体はそれをスキップする必要があります st = "鈍いインディゴバッグには、2つの色あせた黒いバッグ、2つの色あせた赤いバッグ、4つの薄暗いブロンズバッグが含まれています。"
->関数は戻る必要があります
[faded black, faded black, faded red, faded red, dim bronze, dim bronze, dim bronze, dim bronze]
ここで「淡い青」は関係ないので、関数全体はそれをスキップする必要があります st = "淡いブルーのバッグには、2つの淡いフクシアバッグ、5つのミラーブロンズバッグ、2つの色あせたフクシアバッグが含まれています。"
-関数は戻る必要があります
[pale fuchsia, pale fuchsia, mirrored bronze, mirrored bronze, mirrored bronze, mirrored bronze, mirrored bronze, faded fuchsia, faded fuchsia]
ここでは「ライトライム」は関係ないので、関数全体はそれをスキップする必要があります st = "ライトライムバッグには、淡いライムのバッグが4つ、格子縞の緑色のバッグが5つ、透明なターコイズのバッグが3つ、格子縞の黄色のバッグが3つ含まれています。"
->関数は戻る必要があります
[pale lime, pale lime, pale lime, pale lime, plaid green, plaid green, plaid green, plaid green, plaid green, clear turquoise, clear turquoise, clear turquoise, plaid yellow, plaid yellow, plaid yellow]
ここでは「フェードターコイズ」は関係ないので、関数全体でスキップする必要があります。つまり、返される配列リストに「フェードターコイズ」は表示されません。 st = "色あせたターコイズバッグには3つのミラーシルバーバッグが含まれています。"
->関数は戻る必要があります
[mirrored silver bags, mirrored silver bags, mirrored silver bags]
ここでは「ドラブマゼンタ」は関係ないので、関数全体はスキップする必要があります st = "ドラブマゼンタバッグには2つのクリアトマトバッグが含まれています。"
->関数は戻る必要があります
[clear tomato, clear tomato]
等々 tostring()を入れようとすると-newlist.add(list [i] .split( "\ s [0-9]、\ s")。toString());-その後、.add()はエラーになります。 listarrayが文字列型の配列である場合にこれを修正して「名前の色」を取得するにはどうすればよいですか?奇妙な配列の16進文字列ではなく文字列が表示されます
助けていただければ幸いです。質問の改善や私の説明の明確さの助けも歓迎します。ありがとう
希望する出力については、分割するのではなく、一致させるようにしてください。
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; .... public static List<String> GetAll(String st){ Pattern p = Pattern.compile("\\d+\\s\\w+\\s\\w+"); Matcher m = p.matcher(st); List<String> list = new ArrayList<>(); while(m.find()){ String found = m.group(); //get the number by removing everything which is not a digit int i = Integer.parseInt(found.replaceAll("[^\\d]+", "")); //add n copies of the matched string after removing the digit list.addAll(Collections.nCopies(i, found.replaceAll("\\d+", "").trim())); } System.out.println(list); return list; }
同じ質問ですが、他の誰かとは異なるアプローチで、一見の価値があるかもしれません
何かを文字列に変換しようとして、[Ljava.lang.String;@ 1786f9d5]のように@と16進数の束を取得しようとすると、オブジェクトを文字列に変換しようとしましたが、オブジェクトは変換しません。 toString()メソッド/関数があります。入力するものが文字列であることを確認するか、toString()メソッド/関数を使用して文字列に変換できることを確認してください。
関連記事
- reactフックを使用してreactnativeのTextInputでオブジェクトの配列の特定の文字列を変更するにはどうすればよいですか?
- 正規表現を使用してリスト内のデータフレームの要素名を変更する
- 三項条件演算子を通常のifelseステートメントに変更します
- 文字列内の各場所を変更して、考えられるすべての組み合わせを見つけます
- str_detectとdplyrを使用して、文字列をより単純なテキストに変更します
- PHP:pack()で通常の文字列と同じ文字列を返すにはどうすればよいですか?
- 開始文字列を含む正規表現
- 文字列の長さに応じて日付を変更するにはどうすればよいですか?
- Python:amount_soldとprice_per_unitをstringからintに変更するにはどうすればよいですか?
String#split
を返しますString[]
。直接印刷しようとすると、同様の出力が得られます。を使用して配列を印刷できますArrays.toString(array)
または他のいくつかの方法。以下に例を示します。出力:
コードでは、次のようにこのprintステートメントを配置できます。
ただし、デバッガーは次のように要素を表示できる必要があります。
更新:この更新は、OPが次のコメントで投稿した別の要件に基づいています。
出力: