質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

4回答

3356閲覧

同じ文字が連続して並ぶ時、2回目以降の同じ文字を削除して出力するコード

k1225

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/07/24 13:47

同じ文字が連続して並ぶ時、2回目以降の同じ文字を削除して出力する以下のコードの穴埋め問題3問(charAtメソッドを使うよう指示)で、以下のように回答したのですが、エラーになりました。
9行目while ( inputString.charAt(stringIndex) != 0000)
の部分にエラーがあるようです。スペースに至るまでの文字を取り込もうと思ったのですが、どう改善したら良いでしょうか。

java

1inputString = inputString.trim(); // Remove any leading and trailing blanks 2 String result = "", currentWord = "", nextWord = ""; 3 int stringLength = inputString.length(); // Length of the input string 4 int stringIndex = 0; // Index for input string 5 6 while (stringIndex < stringLength) { 7 8 // (Question1) Get the next word in inputString 9 while ( inputString.charAt(stringIndex) != 0000){ 10 11 nextWord = nextWord + inputString.charAt(stringIndex); 12 stringIndex++; 13 } 14 // (Question2) Check if nextWord is the same as currentWord 15 if ( nextWord != currentWord ) { 16 17 result = result + nextWord;//(Question3) 18 } 19 20 stringIndex++; 21 currentWord = nextWord; 22 nextWord = ""; 23 } 24 25 return result.trim(); // Remove any leading and trailing blanks from result

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikadzuchi

2018/07/27 15:26

その9行目はどのような意味を持つと思って書いたのかを教えてください。特に、「0000」の部分について。
xebme

2020/09/26 21:01 編集

英語を理解していますか?wordは語ですが文字(character)と思っていませんか。 文字列の比較はequals()、文字の比較は==なので、問題に誤りがあるかもしれません。 0000の部分は空白に出会うまで文字を蓄積すると読めます。
guest

回答4

0

(Question1) Get the next word in inputString

問題文は'word'なので、同じ語が連続するなら1つにまとめると読めます。

  • charは語の区切り判定に使っている
  • 同じ文字列の判定はequals()を使う

inputStringから次の語を取り出しなさい

Java

1// (Question1) Get the next word in inputString 2while (stringIndex < stringLength && inputString.charAt(stringIndex) != ' ') { 3 nextWord = nextWord + inputString.charAt(stringIndex); 4 stringIndex++; 5}

前の語と同じでなければ、語をつなぎなさい。

語の間の空白を補いました。不要なら取り除いてください。

Java

1// (Question2) Check if nextWord is the same as currentWord 2if (!nextWord.equals(currentWord)) { 3 result = result + " " + nextWord;// (Question3) 4}

別解

Java

1Stream.of(inputString.trim().split("\s")) 2 .collect( 3 ArrayDeque<String>::new, 4 (a,s) -> {if (a.isEmpty() || !a.getLast().equals(s)) a.addLast(s);}, 5 Collection::addAll) 6 .stream() 7 .collect(Collectors.joining(" "));

投稿2020/09/26 21:38

xebme

総合スコア1081

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Java

1class Test { 2 public static void main(String[] args) { 3 String s = " aabbbc, dee fff "; 4 System.out.println("[" + s + "]"); 5 System.out.println("[" + dedup(s) + "]"); 6 } 7 8 static String dedup(String s) { 9 char[] a = s.trim().toCharArray(); 10 int j = 1; 11 for (int i = 1; i < a.length; i++) 12 if (a[i] != a[i-1]) a[j++] = a[i]; 13 return new String(a, 0, j); 14 } 15}

実行結果

text

1[ aabbbc, dee fff ] 2[abc, de f]

投稿2020/09/26 15:12

編集2020/09/26 16:02
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

正規表現を学びましょう

投稿2020/09/26 02:11

cretter

総合スコア91

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

出力文字を変数に入れといて、同じ文字が来たら出力しない、でいいんじゃないでしょうか。

投稿2018/07/24 13:53

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問