2016-10-31 3 views
-3

を動作しない、私は次の形式でテキストファイルにゲームのレベルを検証する必要があります。ここでは文字列の検証が

##### 
# #### 
#  # 
### **# # 
# #* *@# 
# * ### 
# ## # 
##  # 
#.$# # 
# #### 
#### 

は私のJavaコードです:

static Pattern pattern = Pattern.compile("[\\s#.$*@+]"); 
static BufferedReader br; 
public static void main(String[] args) { 
... 
while ((x = br.readLine()) != null) { 
    System.out.println(x.toLowerCase()); 
    System.out.println(isLineValid(x)); 

} ... }

private static boolean isLineValid(String line) { 
    if (pattern.matcher(line).matches()) { 
     return true; 
    } 
    return false; 
} 

私の正規表現で何が間違っていますか?私はいつも偽になるから。ありがとう

+1

Java demo印刷 "有効" を参照してください。 –

+0

なぜ* pattern.matcher(line).matches()*を返すのですか? –

+0

しかし、質問はなぜ...私はいつもこの7つの文字だけを持っています... –

答えて

3

パターンに1文字しか一致しない場合は、0/1以上を*または+個の数値限定子と一致させる必要があります。 Matcher#matches()メソッドが完全な文字列の一致を必要とすることを覚えておいてください。

だから、あなたは文字クラス内、特定の文字をoverescapeする必要はありません

pattern = Pattern.compile("[\\s#.$*@+]*") 

注意が必要です。

isLineValidは常にを返し、ほかに、次の行は、あなたのパターンがを返します一致するかどうかをテストしてください1つのブランチを作成する必要があります。あなたは* isLineValid(のいずれかの場合はfalseを返しとして、あなたが偽のすべてのケースを持っているよりも*)

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import java.util.regex.*; 

class Ideone 
{ 
    public static final Pattern pattern = Pattern.compile("[\\s#.$*@+]*"); // < -- Fixed pattern 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     String s = " #####\n# ####\n#  #\n### **# #\n# #* *@#\n# * ###\n# ## #\n##  #\n#.$# #\n# ####\n ####"; 
     if (isLineValid(s)) { 
      System.out.println("Valid"); 
     } else { 
      System.out.println("Not Valid"); 
     } 
    } 

    private static boolean isLineValid(String line) { 
     if (pattern.matcher(line).matches()) { 
      return true;       // <-- Returning TRUE here 
     } 
     return false; 
    } 
} 
関連する問題