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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

2916閲覧

文字のカウントでスペースを含みたくない

papas1888

総合スコア6

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2021/01/19 12:35

AndroidStudioでEditTextを使い、入力した文字をTextWatcher文字数を表示させるアプリを作っています。
質問内容は、今のコードだとスペースも文字としてカウントされるのでスペースを含みたくないのと、文字は1行の書ききれる限度まで来ると自動的に改行をしてくれるのですが、スペースだとで1行の限度まで進んでも改行をせずに文字数だけカウントされるのでこの2点を直したいと思っています。
助言がありましたらお願いします。

コード public class MainActivity extends AppCompatActivity { private EditText editText; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ((TextView) findViewById(R.id.edit_text)).setMovementMethod(new ScrollingMovementMethod()); editText = findViewById(R.id.edit_text); textView = findViewById(R.id.text_view); editText.addTextChangedListener(new TextWatcher(){ @Override public void onTextChanged(CharSequence s, int start, int before, int count){ // 入力文字数の表示 int txtLength = s.length(); textView.setText(Integer.toString(txtLength)+"文字" ); } @Override public void afterTextChanged(Editable s) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } }); } }
XML <TextView android:id="@+id/text_view" android:text="0文字" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:textSize="30sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.15" /> <EditText android:id="@+id/edit_text" android:layout_width="371dp" android:layout_height="256dp" android:autofillHints="@string/hint" android:background="#ffffff" android:gravity="top|left" android:hint="@string/hint" android:inputType="textMultiLine" android:scrollbars="vertical" android:textAllCaps="false" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.734" />

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

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

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

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

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

papas1888

2021/01/20 05:36

ありがとうございます。改行の件は探してもなかなか見つからないので、やはり大変ですね。
WhiteTempest

2021/01/29 09:37

すみません。 実現したい2点を読み取れなかったのですが、以下で良いですか?  ①改行を除外してカウントしたい  ②スペースも除外してカウントしたい
papas1888

2021/01/30 07:46

おっしゃるとおりです
guest

回答2

0

スペースをカウントしないに関しては単にカウントしないようにすれば良いだけなので(現在文字数としているところから文字コードで判別してスペースの数を引くとか、方法はいろいろあると思います)問題なさそうですが

スペースで改行されないに関してはそんな仕様だったのか、と初めて気付きました。
良い方法があれば誰かが回答するかと思ってましたが回答がなかったため、もし自分がやるとしたらと言う観点で回答させていただきます。

文字幅を計算していってスペースが入力されたときにEditTextの幅を越えていたら改行コードを入れる、のような実装をすれば一応指摘されている点については解消できるのかなと思います。
人為的に入れた改行コードと自動で入った改行との違いや、文字が消された場合の動作などについては動きを見ながら考慮する必要があるかもしれません。

https://qiita.com/daichi_teranishi/items/8bc4bbdb14780913123a
https://www.it-swarm-ja.tech/ja/android/android%E3%81%A7%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E5%B9%85%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%EF%BC%9F/969263270/

結構強引な方法な気もするので一応ご参考までに。(どうしてもやりたい場合は実装しても良いかもしれませんが、実害がなければ仕様と割り切ってしまうのも良いかもしれません)

投稿2021/01/29 09:58

razuma

総合スコア1313

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

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

papas1888

2021/01/30 08:03

ありがとうございます。参考にさせていただきます
guest

0

ベストアンサー

とりあえず、スペースを含みたくないだけならば、
こんな感じでどうでしょう?

Java

1// スペースを削除して、文字数カウント 2int txtLength = s.replace(" ", "").length();

投稿2021/01/29 09:55

WhiteTempest

総合スコア404

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

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

papas1888

2021/01/30 08:01 編集

ありがとうございますreplaceがメソッドとして解決してないというエラーが出てしまうのですがなぜなのでしょうか?
WhiteTempest

2021/01/30 10:51

すみません。 コードの把握が足りてませんでした。 sは、Charsequenceだったのですね。 toStringという関数で、String型へ変換できますので、 以下でどうでしょう? s.toString().replace(" ", "").length();
papas1888

2021/02/03 14:20

ありがとうございます。とりあえずスペースの問題はかいけつできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問