Dangling meta character '+' near index 0 + 報錯 解決方法

1、split方法轉化字符串爲數組:

     String[] str=reader.readLine().split("+");

     報錯:

 Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+

    

 

2、經調試跟蹤發現字符串中帶有“*”時,用“*”分隔字符串成數組是不正確的,正確的寫法是:

     String[] str=reader.readLine().split("\\+");

     修改後,運行正常。

 

3、因爲+、*、|、\等符號在正則表達示中有相應的不同意義,所以在使用時要進行轉義處理。

     這裏同樣可以用

     String[] strPicArr = map.get("hw_pic").toString().split("[*]");

 

刷題時遇到該bug


鏈接:https://ac.nowcoder.com/acm/contest/5477/B
來源:牛客網
 

勇士菜哭武獲得了一把新的武器,武器有特殊的傷害計算方式。武器的傷害計算方式由若干個部分的和組成,用+號連接。每一部分可以是一個整數a,或者是一個公式ndx。其中a表示固定傷害a點;ndx表示擲n個x面骰子,傷害是所有骰子點數的和。總傷害是每一部分傷害的和。

比如2d6+1d70+3,表示擲兩個6面骰子和一個70面骰子(不一定實際存在70面骰子,可以理解成1到70當中隨機選擇一個整數),再加上固定傷害3點。

他正準備挑選一把好武器,需要計算新武器的傷害期望值,想讓你幫他計算一下。

輸入描述:

 1d6+1d70+1d10+6

輸入一個字符串,表示傷害計算公式。字符串長度不超過5000,對於每一個部分,1≤a, n, x≤1000。a,n,x都是整數。 

輸出描述:

 50.5

輸出一個數,表示傷害的期望值。如果不是整數,小數點後位數保留最少,即最終結果只有可能是整數或者小數點後是.5的形式,如果不是整數,那麼保留一位小數。

 

AC代碼

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	static double res=0;
	public static void main(String[] args) throws Exception {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		String[] str=reader.readLine().split("\\+");
		for(int i=0;i<str.length;i++) {
			if(str[i].indexOf('d')!=-1) {
				String[] tp=str[i].split("d");
				int n=Integer.parseInt(tp[0]);
				int x=Integer.parseInt(tp[1]);
				res+=(n*(1+x)*1.0/2);
			}else {
				res+=Integer.parseInt(str[i]);
			}
		}
		if((int)res==res) System.out.println(res);
		else System.out.printf("%.1f",res);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章