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

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

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

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

4回答

388閲覧

Javaの文字列上での文字判別について

Kino96

総合スコア11

Java

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2018/04/17 08:57

JavaのBufferedReaderを用いて文字列を一行抽出します。

その一行の中の同じ文字を区別したいのです。

例えば、同じ行の中に”2017”という文字列と”2”という文字列があったとします。

java

1for(String str1 :array){ 2 int num1 = data.lastIndexOf(str1); 3 String str = String.valueOf(data.charAt(num1)); 4}

いまこのように文字を抽出してから処理しているのですが、

上の例がくると「"2017"の"2"」と「ただの“2”」が判別できません。

これらの文字列の文章中の順番を問わずに区別する方法はありますでしょうか。

ご回答お願いします。

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

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

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

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

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

LouiS0616

2018/04/17 09:07

arrayの中身が {"2017", "2"} であるということだと思いますが、この場合 data.charAt(num1) はどちらのケースでも 2 になってしまう気がします。
swordone

2018/04/29 17:42

「判別する」ってのがどういうことを言っているのかよくわかりません。「単一文字の"2"」なのか「後に文字が続く"2"」なのかということですか?
guest

回答4

0

kyakumoさん回答にある「形態素解析」まではいかなくても「単語として認識したい複数のパターンを同時に検索」という話かも知れないと思いました。

後者程度のものでよいのであれば、正規表現を使う方法も考えられると思います。

大雑把に言うと正規表現エンジンは最長一致を旨として動き下記の例ですと2017, 2の両方にマッチする先頭部分では2017が採用されます。

java

1import java.util.regex.*; 2 3public class Y { 4 public static void main(String[] args) { 5 Pattern p = Pattern.compile("2017|2"); 6 Matcher m = p.matcher("2017 a 2"); 7 while (m.find()) { 8 System.out.println(m.group()); 9 } 10 } 11}

=>
2017
2

投稿2018/04/17 10:40

KSwordOfHaste

総合スコア18392

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

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

0

ベストアンサー

まず検索する文字列群を短い順にソートしておいて、以下のように検索するのはどうでしょうか?

java

1String[] array = {"2017", "20", "2"}; 2Arrays.sort(array, Comparator.comparing(String::length)); 3// ここまでは前準備 4String data = "2017年2月20日"; 5Map<Integer, String> positionStringMap = new TreeMap<>(); 6for (String str1 : array) { 7 for (int i = 0; i < data.length(); i += str1.length()) { 8 int num = data.indexOf(str1, i); 9 if (num >= 0) 10 positionStringMap.put(num, str1); 11 } 12} 13System.out.println(positionStringMap); 14

結果はpositionStringMapに開始位置と見つかった文字列がペアで格納されます。

java

1{0=2017, 5=2, 7=20}

投稿2018/04/25 05:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

質問の意図を履き違えていたらすみません。
恐らく必要な知識は『形態素解析』に関する知識かと思います。
まずは『形態素解析 JAVA』等で調べると良いと思います。

投稿2018/04/17 09:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサーはひとつしか選べなかったので歯がゆいですが、たくさんのご回答ありがとうございました。

投稿2018/05/07 12:43

Kino96

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問