2012-07-23 25 views
0

我有這個問題,如何確定文本是否有平衡分隔符?

寫一個函數來確定文本是否有平衡分隔符。有效的分隔符對是(),[],{}和<>。它們可以嵌套。此外,確定文字分隔符「和‘正確地匹配。

我在java中的方式編碼..

對於每一個檢測線,輸出爲‘1’,如果它具有平衡的分隔符,’0 「否則,

下面一個例子,

4 --- 0 

{123} --- 1 

{qweqwe{sdad} --- 0 

的問題是,我怎麼能在Java代碼中編寫,檢查對有效的分隔符的是否匹配?對不起,我不甚瞭解分隔符。

下面是我的代碼..

public static void main(String args[]) { 
     String a1 = ""; 
     try { 
      Scanner readFile = new Scanner(new File("2.in.txt")); 
      while (readFile.hasNextLine()) { 

       a1 = readFile.nextLine(); 
       System.out.println(a1); 
       if (a1.equals("18")) { 
        System.out.println("0"); 
       } else { 
        System.out.println("1"); 
       } 
      } 
     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
      return; 
     } 
    } 

回答

3

看一看this code,它解決了類似的任務。

import java.util.Stack; 

class BracketChecker { 
    private String input; 

    public BracketChecker(String in) { 
    input = in; 
    } 

    public void check() { 
    Stack<Character> theStack = new Stack<Character>(); 

    for (int j = 0; j < input.length(); j++) { 
     char ch = input.charAt(j); 
     switch (ch) { 
     case '{': 
     case '[': 
     case '(': 
     theStack.push(ch); 
     break; 
     case '}': 
     case ']': 
     case ')': 
     if (!theStack.isEmpty()) { 
      char chx = theStack.pop(); 
      if ((ch == '}' && chx != '{') || (ch == ']' && chx != '[') || (ch == ')' && chx != '(')) 
      System.out.println("Error: " + ch + " at " + j); 
     } else 

      System.out.println("Error: " + ch + " at " + j); 
     break; 
     default: 
     break; 
     } 
    } 
    if (!theStack.isEmpty()){ 
     System.out.println("Error: missing right delimiter"); 
    } 
    } 
} 

public class MainClass { 
    public static void main(String[] args) { 
    String input; 
    input = "[]]()()"; 

    BracketChecker theChecker = new BracketChecker(input); 
    theChecker.check(); 
    } 

} 
6

此問題的一般解決方案是使用堆棧。對於每個輸入字符串,從一個空堆棧開始:

  • 當遇到一個打開的括號時,將它推入堆棧。
  • 當遇到右括號時,從堆棧彈出並與近括號進行比較以查看它們是否匹配。如果不是,則返回false。如果是,繼續。

當您完成檢查字符串後,檢查堆棧是否爲空。如果是,則返回true,否則返回false

對於報價爲'"的情況,如果您不允許報價在同一報價內,並且您不考慮轉義語法,那麼解決方案應該是相同的。

+0

是的,它幫助!但可以詳細說明這些報價'和',如何檢查,如果這些報價是否匹配?就像支架匹配的東西.. – Amazinglykai 2012-07-23 11:07:27

+0

@Amazinglykai:我不是說他們會是一樣的(在一些假設下)?否則,您需要仔細定義如何完成轉義。 – nhahtdh 2012-07-23 11:09:33

相關問題