[解決済み] ごちゃごちゃした文字列から数字を抽出する
質問内容
ごちゃごちゃした文字列を渡される。
"OTNWEHRE"
さて、ここから "ONE" "TWO" "THREE" という単語を抽出して、数値形式で表示しなければならないのです。
1 2 3
そこで私が考えた方法は、まず文字配列にすべての単語 "ZERO,ONE,TWO,THREE,..." を格納し、文字列入力をループして、文字列要素と文字配列の比較を行います(
O' of string i/p with characters of array ['Z','E','R'..]
). 文字が一致した場合(
'O' of string input will match at 'O' of ONE
) そして、char-array の文字をインクリメントしていきます。
after O matches loop through 'N' then 'E'then ','
) を作成し、これらの要素が入力された文字列に存在するかどうかをチェックします。文字が一致したら、次の
','
数字を表示する
しかし、私のアルゴリズムには問題があります。4と5、6と7といった数字は、同じ文字で始まり、異なる文字が続くのです。
以下は私のコードです。
public static void main(String args[])
{
int i,j,a;
String wrd="";
checknum o = new checknum();
Scanner sc = new Scanner(System.in);
String s =sc.nextLine();
String z= "zero,one,two,three,four,five,six,seven,eight,nine,";
char[] c = z.toCharArray();
for(i=0;i<s.length();i++)
{
wrd ="";
for(j=0;j<c.length;j++)
{
if(s.charAt(i)==c[j])
{
wrd = wrd+c[j];
while(c[j] != ',')
{
j++;
if(s.indexOf(c[j])>=0)
wrd = wrd+c[j];
else{
wrd="";
break;
}
}
if(wrd!=null){
a=o.checknumber(wrd);
System.out.println(a);
}
}
}
}
}
PS
もし、私のやり方が完全に間違っていて、この問題に対して他のやり方があれば教えてください。
どのように解決するのですか?
私の理解が正しければ、数字は文字を共有することができます。(例: 1つの
T
を使用した場合、両方の
TWO
と
THREE
が含まれます)。
の数をすべて集める。 文字 から 文字列 の中に ハッシュマップ :
String s = ...;
HashMap<Character, Integer> charCount = new HashMap<>();
for (char c : s.toCharArray()) {
Integer count = charCount.get(c);
if (count == null) count = 0;
map.put(c, ++count);
}
この方法では 文字列 を1回だけ実行します。
そして、それぞれの
番号
を独自の
ハッシュマップ
と
文字/整数のペア
は、例えば
THREE
は、次のように格納されます。
{{T,1},{H,1},{R,1},{E,2}}
.
そして、それぞれの
番号マップ
をチェックし
charCount
には、それぞれの
文字 (キー)
現在の
番号
で、もし
回数(値)
が大きいか等しい。
または、何らかの ツリー構造 を使用します。 数字文字 というように
_____
| O,1 |
|_____|
/ \
_____/ \_____
| E,1 | | W,1 |
|_____| |_____|
/ \ \
_____/ \_____ \_____
| N,1 | | R,1 | | T,1 |
|_____| |_____| |_____|
v | v
"ONE" __|__ "TWO"
| Z,1 |
|_____|
v
"ZERO"
そして、その中を歩き、すべての 葉 という数字が含まれています。
// pseudocode
recursiveCheck(node) {
if (charCount.containsKey(node.character) && charCount.get(node.character) > node.count) {
if (node.hasChildren()) {
for (childnode in node) {
recursiveCheck(childnode);
}
}
else {
// node is leaf, node.number is contained
}
}
}
関連
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] 英数字のランダムな文字列を生成する方法
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み] hibernate のプロパティが見つかりません。
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】 JAVA 変数宣言はここではできない
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。