実験については、乱数を使用しているので、出力される個数にはばらつきが ある。 大きく違わない限りは、正答である。
部分的にマッチするのを期待して書く方 法と、その他の文字を明示的に書く方法がある。
String input="-10+30-20";
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Ex252 {
public static void main(String[] args) {
Pattern p = Pattern.compile( "(\\+|-)?(0|[1-9][0-9]*)");
String input="-10+30-20";
Matcher m = p.matcher(input);
while(m.find()) {
System.out.println(m.group());
}
}
}
文字列中の正規表現のエスケープのためのバックスラッシュに関しては、 更にバックスラッシュを重ねてエスケープする必要がある。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Ex253 {
public static void main(String[] args) {
Pattern p = Pattern.compile( "(\\+|-)?(0|[1-9][0-9]*)");
String input="-10+30-20";
Matcher m = p.matcher(input);
int n=0;
while(m.find()) {
n++;
}
System.out.println(n);
}
}
package ex31;
import java.io.*;
enum State {
STATE1, STATE2
}
class Ex31 {
private static int get(Reader r) throws IOException {
int c;
do{
c=r.read();
}while(c=='\n' || c=='\r');
return c;
}
public static void main(String[] arg)throws IOException{
final Reader r = new InputStreamReader(System.in);
int c;
State s=State.STATE1;
try{
while((c=get(r))!=-1){
switch(s){
case STATE1:
if(c>='1' && c<='9'){ s=State.STATE2; }
else{ throw new IllegalStateException(); }
break;
case STATE2:
if(c>='0' && c<='9'){ s=State.STATE2; }
else{ throw new IllegalStateException(); }
break;
}
}
if(s!=State.STATE2){
throw new IllegalStateException();
}
System.out.println("Accept");
}catch(IllegalStateException e){
System.out.println("Reject");
}
}
}
状態リスト | 入力 | 遷移先の状態リスト |
---|---|---|
1 | a | 1,2 |
b | 1 | |
1,2 | a | 1,2 |
b | 1,3 | |
1,3 | a | 1,2 |
b | 1,4 | |
1,4 | a | 1,2 |
b | 1 |
package ex321;
import java.io.*;
enum State {
S1, S12, S13, S14
}
class Ex321 {
private static int get(Reader r) throws IOException {
int c;
do{
c=r.read();
}while(c=='\n' || c=='\r');
return c;
}
public static void main(String[] arg)throws IOException{
final Reader r = new InputStreamReader(System.in);
int c;
int count=0;
State s=State.S1;
while((c=get(r))!=-1){
switch(s){
case S1:
if(c=='a'){ s=State.S12; }
else if(c=='b'){ s=State.S1; }
break;
case S12:
if(c=='a'){ s=State.S12; }
else if(c=='b'){ s=State.S13; }
break;
case S13:
if(c=='a'){ s=State.S12; }
else if(c=='b'){ s=State.S14; }
break;
case S14:
count ++;
if(c=='a'){ s=State.S12; }
else if(c=='b'){ s=State.S1; }
break;
}
}
if(s==State.S14){
count ++;
}
System.out.println(count);
}
}