文字列操作と正規表現

Similar documents
Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

JAVA とテンプレート

Microsoft PowerPoint - prog08.ppt

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

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

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { } S = a, a,, an の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しい

ALG ppt

untitled

Microsoft PowerPoint - prog08.ppt

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

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

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

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

二分木ヒープとは 集合 リストから 最小な 要素を取り出す 二分木ヒープは そのための標準的データ構造 二分木ヒープを保存するデータ構造 二分木ヒープの操作のメソッド 対象となるデータクラス 識別のためのlabelフィールド 値を保持するvalueフィールド

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Java講座

Microsoft PowerPoint ppt

Microsoft PowerPoint - chap10_OOP.ppt

CollectionsとLambda式

Microsoft PowerPoint - prog03.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

プログラミング入門1

スライド 1

GEC-Java

PowerPoint プレゼンテーション

デジタル表現論・第4回

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

デジタル表現論・第6回

情報処理Ⅰ

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

Microsoft Word - NonGenList.doc

基本情報STEP UP演習Java対策

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

Prog1_3rd

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

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

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

Microsoft Word - problem3.doc

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Programming-C-3.key

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

グラフの探索 JAVA での実装

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

Microsoft Word - NonGenTree.doc

Microsoft PowerPoint - Pro110111

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プログラミングⅠ

手書認識 グラフ描画 Step2-2 手書認識 : 認識結果を PaintPanel で描画する < 属性付き文字列 AttributedString> 標準出力では分かりにくいうえに認識結果を使えないので 認識するごとに PaintPanel に文字を描画することにする ここで 数式はただの文字列

スライド 1

JavaプログラミングⅠ

PowerPoint プレゼンテーション

新・明解Java入門

Microsoft Word - keisankigairon.ch doc

人工知能入門

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

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

Prog1_6th

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

JAVA入門

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

PowerPoint プレゼンテーション

メソッドのまとめ

Sort-of-List-Map(A)

Prog1_10th

Javaプログラムの実行手順

問題1 以下に示すプログラムは、次の処理をするプログラムである


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( プログラムを一度作成したらど


プログラミング入門1

Microsoft Word - Javacc.docx

Program Design (プログラム設計)

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

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Microsoft PowerPoint - prog09.ppt

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

JAVA入門

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog09.ppt

Java から見たオブジェクト指向入門 オブジェクト指向 AtoZ セミナー ( 株 ) 豆蔵井上樹

JavaプログラミングⅠ

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

プログラミング入門1

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 ページ