Javaでの文字列の検索と分割
※この更新はプログラミング関係のメモですこどもの学習用の社会のアプリを作成中。先に歴史ができたので、ちょっと使ってみてもらう。「入力して、〇とか出るのがいい!!」とか言われたので…地理の方には、入力できる画面を追加しました。TOP画面に「入力回答する」ってチェックボックスを追加して、ここにチェックされてたら、EditTextのある画面の方を呼びます。回答の入力は、Androidの入力機能そのまんまで…「答え合わせ」ボタン押したら、正誤チェックして、〇×表示して、正誤結果をDBに反映。こんなもんでいいかな…しっかし、いちいち回答を入力するのメンドイと、私は、思うんだけどね… ■ ■ ■歴史は青色(水カラー)にしたので、地理は黄緑(風カラー)にした~モチベーションが大事ですよねっ ■ ■ ■〇×表示は、以前に四字熟語でやったので…メモしといたのを見て使いまわしますふふふ…コード乗せといたからコピペできる『[AndroidStudio]採点して○×画像を重ねる』前に公倍数アプリ作った時に、やりたかったけど、やり方が分からなくてできなかったこと、のやり方が分かったので嬉々としてメモしておきます!!まずは、やりたかった…ameblo.jpついでに画面が横になっちゃうのが発覚したので、画面縦固定も過去のメモ見て入れる『[AndroidStudio]画面を縦に固定する』作ったアプリ、縦画面前提でパーツ配置してあるんですが、スマホを横にすると。。。横画面になっちゃうというバグがありますwスクロール不要になる様に配置してるので、…ameblo.jp同じ人が作ってるので、欲しい機能は同じなんだよなー ■ ■ ■複数解答を持ってる問題があるのが、問題です↓こーゆー解答この場合、「島国」でも「海洋国」でも正解にしないといけないので…この解答の「島国(海洋国)」という単語を二つに分解して、両方で正誤チェックしないといけません…ということで、文字列の検索(contains)と分割(split)と一致判定(equals)を利用して、正誤チェック関数は、こんなコードにしてみた。というメモ。ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーpublic boolean checkSeiGo(){ Boolean blnRes = false; String strInputData = edit_kai.getText().toString(); //「(」を含んでいるか if(rightAnswer.contains("(")){ //別解答有り //「(」で分割する→1つ目の解答 String[] tmpAnswers = rightAnswer.split("\\("); String strAnswer1 = tmpAnswers[0]; //「)」で分割する→2つ目の解答 String[] tmpAnswers2 = tmpAnswers[1].split("\\)"); String strAnswer2 = tmpAnswers2[0]; //正誤チェック if(strInputData.equals(strAnswer1)){ blnRes = true; }else if(strInputData.equals(strAnswer2)){ blnRes = true; } }else{ //解答はひとつ //正誤チェック if(strInputData.equals(rightAnswer)){ blnRes = true; } } return blnRes; }ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー検索や分割する、「(」と「)」は、半角の括弧なので、特殊文字なのですが…検索(contains)では、通常文字扱いで、「"("」で検索できる。分割(split)では、特殊文字扱いで、「"\\("」みたいに、前に半角¥マークをふたつ付与しないとダメ。JavaのStringのクラスは不思議だなぁ…(おかげで、containsの方で\\付けて書いててバグって、時間けっこうつぶしましたw) ■ ■ ■歴史の方も、同じように入力できるようにして欲しい!と言われたけど…歴史には…こーゆー↓、複数回答という問題がある…これだと、回答エリアを2つ準備して、順不同で正解にしないといけない…めっちゃ、めんどくさーーー!!さらに「租・調・庸」とかいう3つ回答がある問題もある…データに、回答エリア数を持たせて、それに合わせて・出題時の表示・答え合わせ時の正誤チェックを分岐させたらできるんだろうな…とは思うけど…めっちゃ、めんどくさそーーー!!