質問編集履歴

1

正規表現を使って、文の先頭から見ていくプログラムを書いてみました

2017/05/15 05:52

投稿

nuiri1343
nuiri1343

スコア54

test CHANGED
File without changes
test CHANGED
@@ -55,3 +55,117 @@
55
55
  ###補足
56
56
 
57
57
  実際にコードを書くのは自分で頑張りますので、ヒントだけでも教えていただけると幸いです。
58
+
59
+
60
+
61
+
62
+
63
+ ###追記
64
+
65
+ 正規表現を使ったプログラムを書いてみたのですが
66
+
67
+ もっと効率よくならないか、悩んでいます。見ていただけませんでしょうか?
68
+
69
+ 今回は、"abc"と"cba"の変換なので、どちらも3文字ですが、文字数が違う場合も想定して書いてみました。
70
+
71
+
72
+
73
+ ```java
74
+
75
+ import java.util.Scanner;
76
+
77
+ import java.util.regex.Pattern;
78
+
79
+ import java.util.regex.Matcher;
80
+
81
+
82
+
83
+ public class Main{
84
+
85
+ public static void main(String[] args) {
86
+
87
+ Scanner sc = new Scanner(System.in);
88
+
89
+ String s = sc.nextLine(); //置換したい文字列を受け取る
90
+
91
+
92
+
93
+ //abcをcbaに、cbaをabcに置換する。
94
+
95
+
96
+
97
+ Pattern p1 = Pattern.compile("abc|cba");
98
+
99
+ Matcher m;
100
+
101
+
102
+
103
+ int next = 0; //分割点
104
+
105
+ String result = "";
106
+
107
+
108
+
109
+ while(true){
110
+
111
+ m = p1.matcher(s);
112
+
113
+ if(m.find()){
114
+
115
+ next = m.start();
116
+
117
+ result += s.substring(0,next); //マッチした手前までをresultへ入れる
118
+
119
+ s = s.substring(next); //resultに入れた分を削除
120
+
121
+
122
+
123
+ if(s.substring(0,3).equals("abc")){ //マッチしたのが"abc"だったら
124
+
125
+ result+="cba"; //resultに"cba"を入れる
126
+
127
+ if(s.length()==3){ //マッチした部分が文の最後だったら
128
+
129
+ break;
130
+
131
+ }
132
+
133
+ s = s.substring(3); //残りの部分をsに入れる
134
+
135
+ }else{
136
+
137
+ result+="abc";
138
+
139
+ if(s.length()==3){
140
+
141
+ break;
142
+
143
+ }
144
+
145
+ s = s.substring(3);
146
+
147
+ }
148
+
149
+
150
+
151
+ }else{
152
+
153
+ result += s;
154
+
155
+ break;
156
+
157
+ }
158
+
159
+ }
160
+
161
+ System.out.println(result);
162
+
163
+ }
164
+
165
+ }
166
+
167
+
168
+
169
+
170
+
171
+ ```