文字列操作と正規表現

Similar documents
目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

Brekeke PBX - Version 2.1 ARSプラグイン開発ガイド

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

Java講座

Microsoft PowerPoint - chap10_OOP.ppt


JavaプログラミングⅠ

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

今回の内容 グラフとオブジェクト指向プログラミング Java を使う理由 Java の基本 Javaのライブラリ 開発 実行 クラスの再利用 クラス継承 抽象クラス 開発の要点

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

<4D F736F F D2091E F196E291E889F090E C4816A82CC838C E646F6378>

K227 Java 2

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

基本情報STEP UP演習Java対策

このルールをそのまま正規表現として書くと 下記のようになります ^A[0-9]{2}00[0-9]{3}([0-9]{2})?$ ちょっと難しく見えるかもしれませんが 下記のような対応になっています 最初 固定 年度 固定 通番 ( 枝番 ) 最後 ルール "A" 数字 2 桁 0 を 2 桁 数字

プログラミング基礎I(再)

PowerPoint プレゼンテーション

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

グラフの探索 JAVA での実装

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

オブジェクト指向プログラミング・同演習 5月21日演習課題

JavaプログラミングⅠ

JavaプログラミングⅠ

新・明解Java入門

Microsoft Word - keisankigairon.ch doc

人工知能入門

明解Javaによるアルゴリズムとデータ構造

微分方程式 モデリングとシミュレーション

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

メソッドのまとめ

Javaプログラムの実行手順


2

Java Java Java Java Java 4 p * *** ***** *** * Unix p a,b,c,d 100,200,250,500 a*b = a*b+c = a*b+c*d = (a+b)*(c+d) = 225

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

正規表現応用

情報技術 Java の特徴 Java は現在 事務処理計算用プログラミング言語として開発された COBOL に取って代わり C 言語や C++ と並んで 現在最も使われているプログラミング言語の一つである Java は Write Once, Run Anywhere( プログラムを一度作成したらど


Microsoft Word - Javacc.docx

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

JavaプログラミングⅠ

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

Transcription:

文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科

2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る

3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性 equals(): 保持している文字列の同等性 String a = abc ; String b = abc ; if ( a == b ){// 失敗 if ( a.equals(b) ){// 成功

4 文字列を探す char charat(int index) index の位置の文字 int indexof(string str) str が最初に現れる位置 int indexof(string str, int from) from 以降で str が最初に現れる位置 String substring(int begin, int end) 部分文字列

5 文字列を作る 連結する String クラス中の文字列は定数 Object クラス tostring() メソッドで文字列化 tostring() メソッドを上書きすることで 各クラスに適切な文字列化を定義

6 StringBuilder クラス 文字になるものを連結するメソッド append() 引数を文字列表現に変換 (tostring()) して 末尾に連結 delete() 部分文字列を削除 insert() 指定位置の要素を挿入

7 StringBuilder の例 リストの要素をカンマで連結し [] で囲む public static <T> String list2string(list<t> list) { StringBuilder sb = new StringBuilder(); sb.append("["); list.stream().foreachordered( p -> sb.append(p).append(",") ); int k = sb.lastindexof(","); sb.deletecharat(k).append("]"); return sb.tostring();

8 正規表現 文字や文字列の繰り返しパターンを文字列として記述 ^ : 文字列の先頭 ^Java : 文の先頭が Java である $ : 文字列の終端 java$ : 文末が java である

9 X? : Xが0または1 回 X+ : Xが1 回以上 X* : Xが0 回以上 X{n:Xがn 回 X{n,:Xがn 回以上 [abc] : a b またはc s : 空白文字 (spaceやtabなど) S : 空白文字以外 d : 数字 : [0-9] D : 数字以外

10 例 : 多様な区切り文字で文字列 を分割 space タブ カンマ コロンなど 様々な区切り文字に対応 String ss[] = s.split(" s, :"); : パターンを or で連結 注意 :java では は制御文字

11 文字列を見つける 正規表現の定義 Pattern p = Pattern.compile(String regex); matcher の生成 Matcher m = p.matcher(input); パターンの探索 boolean m.find() パターンの発見 int m.start() パターンの開始位置 String m.group() 一致した文字列

12 パターン探索の例 String input = "0010111010011"; // 正規表現の定義 Pattern p = Pattern.compile("101+"); Matcher m = p.matcher(input); while (m.find()) {// 探索 // 一致した文字列 String s = m.group(); System.out.println("matches ");

13 String input = "0010111010011"; // 正規表現の定義 Pattern p = Pattern.compile("101+"); Matcher m = p.matcher(input); int c = 0;// 探索開始位置 while (m.find(c)) {// 位置を指定して探索 c = m.start();// パターンを発見した位置 String s = m.group(); System.out.println("matches "+s + " at " + c); c++;// 探索位置を一つ進める

14 正規表現グループ ((A)(B(C))) は以下のように番号付く 1. ((A)(B(C))) 2. (A) 3. (B(C)) 4. (C)

15 文字列の置換 単純な置き換え m.replacefirst( 置換文字列 ) m.replaceall( 置換文字列 ) 一致した文字列の再利用 $0 一致した全体 部分文字列の利用 $1 $2 など

16 パターン置換の例 String input = "001011101001101"; // 正規表現の定義 Pattern p = Pattern.compile("101+"); Matcher m = p.matcher(input); // 単純な置き換え System.out.println(m.replaceFirst("121")); System.out.println(m.replaceAll("121")); // 一致した文字列の利用 System.out.println(m.replaceAll("_$0_")); // 一致した部分の指定 p = Pattern.compile("(10)(1+)"); m = p.matcher(input); System.out.println(m.replaceAll("12$2"));

BuilderExample.java package example; import java.util.arraylist; import java.util.list; /** * * @author tadaki */ public class BuilderExample { public static <T> String list2string(list<t> list) { StringBuilder sb = new StringBuilder(); sb.append("["); list.stream().foreachordered( p -> sb.append(p).append(",") ); int k = sb.lastindexof(","); sb.deletecharat(k).append("]"); return sb.tostring(); /** * @param args the command line arguments */ public static void main(string[] args) { int n = 10; List<Integer> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add((int) (n * Math.random())); System.out.println(list2String(list)); 1/1 ページ

SplitExample.java package example; /** * * @author tadaki */ public class SplitExample { /** * @param args the command line arguments */ public static void main(string[] args) { String input[] = { "a,b,c,d,e,f", "a b c d e f", "a\tb\tc\td\te\tf", "a:b:c:d:e:f" ; for (String s : input) { String ss[] = s.split("\\s, :"); for (String e : ss) { System.out.print(e + " "); System.out.println(); 1/1 ページ

RegexSample.java package example; import java.util.regex.matcher; import java.util.regex.pattern; /** * * @author tadaki */ public class RegexSample { /** * @param args the command line arguments */ public static void main(string[] args) { String input = "0010111010011"; // 正規表現の定義 Pattern p = Pattern.compile("101+"); Matcher m = p.matcher(input); int c = 0;// 探索開始位置 while (m.find(c)) {// 位置を指定して探索 c = m.start();// パターンを発見した位置 String s = m.group(); System.out.println("matches "+s + " at " + c); c++;// 探索位置を一つ進める 1/1 ページ

ReplaceExample.java package example; import java.util.regex.matcher; import java.util.regex.pattern; /** * * @author tadaki */ public class ReplaceExample { /** * @param args the command line arguments */ public static void main(string[] args) { String input = "001011101001101"; // 正規表現の定義 Pattern p = Pattern.compile("101+"); Matcher m = p.matcher(input); // 単純な置き換え System.out.println(m.replaceFirst("121")); System.out.println(m.replaceAll("121")); // 一致した文字列の利用 System.out.println(m.replaceAll("_$0_")); // 一致した部分の指定 p = Pattern.compile("(10)(1+)"); m = p.matcher(input); System.out.println(m.replaceAll("12$2")); 1/1 ページ