teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

正規表現でのプログラムを追記しました。

2018/09/24 00:53

投稿

renji
renji

スコア41

title CHANGED
File without changes
body CHANGED
@@ -19,4 +19,44 @@
19
19
  ```
20
20
  という感じでするのですが、(s_2.equals([0-1999])ではうまくいきません。
21
21
  やはり、s_2の中の数値を表す文字をあらたなint型の配列に変換しておさめていき、その数字が0から1999の範囲内である、という調べ方しかないのでしょうか?
22
- よろしくお願いします。
22
+ よろしくお願いします。
23
+
24
+
25
+ ---追記---
26
+
27
+ 正規表現を使って、上の問題のプログラムを作ってみました。
28
+ ```ここに言語を入力
29
+ import java.util.*;
30
+ import java.util.regex.Pattern;
31
+ import java.util.regex.Matcher;
32
+
33
+ public class main{
34
+ public static void main(String[] args){
35
+ String S = "1111s0123s0124s0214s0124";
36
+
37
+ Pattern p = Pattern.compile("[0-1]{1}[0-9]{3}s[0-1]{1}[0-9]{3}s[0-1]{1}[0-9]{3}s[0-1]{1}[0-9]{3}s[0-1]{1}[0-9]{3}");
38
+ Matcher m = p.matcher(S);
39
+
40
+ System.out.println(m.find());
41
+ }
42
+ }
43
+ ```
44
+ というようになりました。
45
+ ```ここに言語を入力
46
+ String S = "1111s0123s0124s0214s0124";
47
+ ```
48
+ のところなのですが、すべての数字の部分を4桁表示にしないとうまくいきませんでした。
49
+ (Pattern p = Pattern.compileの正規表現チェックで、すべて0000~1999を調べているので)
50
+
51
+ ```ここに言語を入力
52
+ String S = "1111s123s124s214s124";
53
+ ```
54
+ 上のような4桁と3桁の数字の混ざった文字列の場合、
55
+ 一旦、sで区切った文字をsplit("s")してから、何桁か調べて、その桁数によって、
56
+ ```ここに言語を入力
57
+ Pattern p = Pattern.compile
58
+ ```
59
+ で調べる方法を複数用意するのが良いのかなと思いました。
60
+
61
+ 質問時には、数値変換してからチェックする、以外の方法は思いつきませんでしたが、知識の深い方からのアドバイスにより、正規表現でのチェックという方法があると知り、上のようなプログラムを作り、一応、ここに念のため、記させていただきました。
62
+ 以上となります。