[語法] replaceFirst()用法

看板java作者 (akk)時間5年前 (2019/06/16 10:34), 編輯推噓1(106)
留言7則, 3人參與, 5年前最新討論串1/1
這是拿括號的問題 請問下 在中間這邊的 st2=st1; while(st1.length()!=0) { for(int i=0;i<st2.length();i++) { if(st.substring(i,i+1).equals("{")) { st1=st.replaceFirst("}",""); st1=st1.replaceFirst("{",""); //遇到{ 就拿掉} 跟拿掉{ 最後的st1=st1.replaceFirst("{",""); 出現exception 不知道有沒有大大可以指點一下 為什麼不行 我不想用stack 以下完整的碼 package test; import java.util.HashMap; import java.util.Scanner; import java.util.Stack; public class Coco { public static void main(String[] args) { // Scanner sc = new Scanner(System.in); // System.out.println("請輸入{(["); // String st =sc.nextLine(); String st = "{{{{{DDDVV}}))(())]][[["; String st1=""; String st2=""; for(int i=0;i<st.length();i++) { if(st.substring(i,i+1).equals("{")||st.substring(i,i+1).equals("[")||st.substring(i,i+1).equals("(")||st.substring(i,i+1).equals("}")||st.substring(i,i+1).equals("]")||st.substring(i,i+1).equals(")")) { st1=st1.concat(st.substring(i,i+1)); } } //將st 沒括號的拿掉 st2=st1; while(st1.length()!=0) { for(int i=0;i<st2.length();i++) { if(st.substring(i,i+1).equals("{")) { st1=st.replaceFirst("}",""); st1=st1.replaceFirst("{",""); //遇到{ 就拿掉} 跟拿掉{ }else if(st.substring(i,i+1).equals("[")) { st1=st.replaceFirst("]",""); st1=st1.replaceFirst("["," "); }else if(st.substring(i,i+1).equals("(")) { st1=st.replaceFirst(")",""); st1=st1.replaceFirst("(",""); } } for(int i=0;i<st1.length();i++) { if(!(st.substring(i,i+1).equals("{")||st.substring(i,i+1).equals("[")||st.substring(i,i+1).equals("(")||st.substring(i,i+1).equals("}")||st.substring(i,i+1).equals("]")||st.substring(i,i+1).equals(")"))) { System.out.println(false); break; } } if(st1.length()==0) { System.out.println(true); break; } } System.out.println(st1); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.54.97 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/java/M.1560652469.A.472.html

06/16 14:48, 5年前 , 1F
看不懂你這段程式是打算做什麼
06/16 14:48, 1F

06/16 14:52, 5年前 , 2F
至於為什麼會出現exception,看exception是什麼不就知道了
06/16 14:52, 2F

06/16 14:55, 5年前 , 3F
replaceFirst的第一個參數是regex,在regex中{[(都是特殊符
06/16 14:55, 3F

06/16 14:56, 5年前 , 4F
號,要單純比對字元要escape,例如replaceFirst("\\{","");
06/16 14:56, 4F

06/16 22:06, 5年前 , 5F
大大你的意思是 這個方法只能用在正則表達嗎
06/16 22:06, 5F

06/17 12:42, 5年前 , 6F
應該說 replaceFirst 只會把你的第一參數當正則式
06/17 12:42, 6F

06/17 12:43, 5年前 , 7F
你要讓它找東西就要讓那個正則式表達你要找的東西
06/17 12:43, 7F
文章代碼(AID): #1T1QgrHo (java)
文章代碼(AID): #1T1QgrHo (java)