【问题标题】:java.util.regex.PatternSyntaxException Androidjava.util.regex.PatternSyntaxException Android
【发布时间】:2013-09-25 12:33:52
【问题描述】:

我正在替换字符串的一部分,如下所示

biblebook.replaceAll("[{\"-bnumber\":\"1\",\"-bname\":\"Genesis\",\"CHAPTER\":","[");

但我的日志显示以下错误

09-25 16:33:47.421: W/System.err(5116): java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 46:
    09-25 16:33:47.421: W/System.err(5116): [{"-bnumber":"1","-bname":"Genesis","CHAPTER":
    09-25 16:33:47.421: W/System.err(5116):                                               ^
    09-25 16:33:47.421: W/System.err(5116):     at java.util.regex.Pattern.compileImpl(Native Method)
    09-25 16:33:47.421: W/System.err(5116):     at java.util.regex.Pattern.compile(Pattern.java:400)
    09-25 16:33:47.429: W/System.err(5116):     at java.util.regex.Pattern.<init>(Pattern.java:383)
    09-25 16:33:47.429: W/System.err(5116):     at java.util.regex.Pattern.compile(Pattern.java:374)
    09-25 16:33:47.429: W/System.err(5116):     at java.lang.String.replaceAll(String.java:1784)
    09-25 16:33:47.429: W/System.err(5116):     at .Index$loadingTask.doInBackground(Index.java:383)

有什么想法吗?

更新这是我的字符串的一部分

[{"-bnumber":"1","-bname":"Genesis","CHAPTER":[{"-cnumber":"1","VERS":[{"-vnumber":" 1","#text":"Au 毕业典礼,Dieu créa les cieux et la terre."},{"-vnumber":"2","#text":"La terre était informe et vide: il y avait des ténèbres à la surface de l'abîme, et l'esprit de Dieu se mouvait au-dessus des eaux."},{"-vnumber":"3","#text":"Dieu dit: Que la lumière soit! Et la lumière fut."},{"-vnumber":"4","#text":"Dieu vit que la lumière était bonne; et Dieu sépara la lumière d'avec les ténèbres."},{"-vnumber":"5","#text":"Dieu appela la lumière jour, et il appela les ténèbres nuit。 Ainsi, il y eut un soir, et il y eut un matin: ce fut le Premier jour."},{"-vnumber":"6","#text":"Dieu dit: Qu'il y ait une étendue entre les eaux, et qu'elle sépare les eaux d'avec les eaux."},{"-vnumber":"7","#text":"Et Dieu fit l'étendue, et il sépara les eaux qui sont au-dessous de l'étendue d'avec les eaux qui sont au-dessus de l'étendue。等等 ainsi."},{"-vnumber":"8","#text":"Dieu appela l'étendue ciel。艾因西, il y EUt un soir, et il y EUt un matin: ce fut le second jour."},{"-vnumber":"9","#text":"Dieu dit: Que les eaux qui sont au-dessous du ciel se rassemblent en un seul lieu, et que le sec 天堂。 Et cela fut ainsi."},{"-vnumber":"10","#text":"Dieu appela le sec terre, et il appela l'amas des eaux mers。生命之光 était bon."},{"-vnumber":"11","#text":"Puis Dieu dit: Que la terre produise de la verdure, de l'herbe portant de la semence, des arbres Fruitiers donnant du fruit selon leur espèce et ayant en eux leur 陆地上的土地。等等 ainsi."},{"-vnumber":"12","#text":"La terre produisit de la verdure, de l'herbe portant de la semence selon son espèce, et des arbres donnant du fruit et ayant en eux leur semence selon leur espèce。迪厄 vit que cela était bon."},{"-vnumber":"13","#text":"Ainsi, il y eut un soir, et il y EUt un matin: ce fut le troisième jour."},{"-vnumber":"14","#text":"Dieu dit: Qu'il y ait des luminaires dans l'étendue du ciel,pour séparer le jour d'avec la nuit;昙花一现 soient des signes pour marquer les époques, les jours et les annees;"},{"-vnumber":"15","#text":"et qu'ils servent de luminaires dans l'étendue du ciel, pour éclairer la terre。等等 ainsi."},{"-vnumber":"16","#text":"Dieu fit les deux grands 灯具,le plus grand luminaire pour présider au jour, et le plus petit luminaire pour présider à la nuit;我适合澳洲人 étoiles."},{"-vnumber":"17","#text":"Dieu les plaça dans l'étendue du ciel, pour éclairer la terre,"},{"-vnumber":"18","#text":"pour présider au jour et à la nuit, et pour séparer la lumière d'avec les ténèbres。 Dieu vit que cela était bon."},{"-vnumber":"19","#text":"Ainsi, il y eut un soir, et il y eut un matin: ce fut le quatrième jour."},{"-vnumber":"20","#text":"Dieu dit: Que les eaux produisent en abondance des animaux vivants, et que des oiseaux volent sur la terre vers l'étendue du ciel."},{"-vnumber":"21","#text":"Dieu créa les grands poissons et tous les animaux vivants qui se meuvent, et que les eaux produisirent en abondance selon leur espèce; il créa aussi tout oiseau ailé selon 儿子埃斯佩斯。 Dieu vit que cela était bon."},{"-vnumber":"22","#text":"Dieu les bénit, en disant: Soyez féconds, multipliez, et remplissez les eaux des mers;等等 oiseaux multiplient sur la terre."},{"-vnumber":"23","#text":"Ainsi, il y EUt un soir, et il y EUt un matin: ce fut le cinquième jour."},{"-vnumber":"24","#text":"Dieu dit: Que la terre produise des animaux vivants selon leur espèce, du bétail, des reptiles et des animaux terrestres,selon leur espèce。等等 ainsi."},{"-vnumber":"25","#text":"Dieu fit les animaux de la terre selon leur espèce, le bétail selon son espèce, et tous les reptiles de la terre selon leur espèce。 Dieu vit que cela était bon."},{"-vnumber":"26","#text":"Puis Dieu dit: Faisons l'homme à notre image, selon notre semblance, et qu'il domine sur les poissons de la mer, sur les oiseaux du ciel, sur le bétail, sur toute

【问题讨论】:

  • 我的评论是题外话,但我认为JSONArray jsonArray = new JSONArray(biblebook) 会满足你的需要。
  • 是的,但是当说 jsonArray.getString("CHAPTER");我没有得到章节的所有项目
  • [ 打开一个字符类,之后没有关闭。如果您实际上不想开课,请转义 [
  • 我不太了解这个库,但您可能需要调用 getJSONArray("CHAPTER"); 之类的东西,因为结果不是字符串而是数组。
  • 是的,当我使用 getJSONArray("CHAPTER"); 时,我的 CHAPTER TAG 包含一个属性;它转义属性并仅返回元素数组

标签: java android


【解决方案1】:

您必须使用双反斜杠 (\\) 转义方括号([]),因为它们在正则表达式中有一个功能...(编辑:当然还有大括号 @987654325 @})

biblebook.replaceAll("\\[\\{\"-bnumber\":\"1\",\"-bname\":\"Genesis\",\"CHAPTER\":","\\[");

另外:我发现使用在线正则表达式检查器like this 可以帮助我更快地工作

【讨论】:

  • 出现错误:java.util.regex.PatternSyntaxException:索引 4 附近的 {min,max} 间隔出错:应用您的解决方案后
  • aligato ppeterka (y)
【解决方案2】:

如果您想替换该确切字符串并且不想使用正则表达式,请使用 biblebook.replace() 而不是 biblebook.replaceAll()

【讨论】:

  • @Nikita 你试过了吗:biblebook = biblebook.replace("[{\"-bnumber\":\"1\",\"-bname\":\"Genesis\",\"CHAPTER\":","[");?
【解决方案3】:

如果您想将[ 包含在您的正则表达式中,那么您需要关闭括号。 [{\"-bnumber\":\"1\",\"-bname\":\"Genesis\",\"CHAPTER\]

但是如果括号[ 是你的字符串的一部分,那么你需要转义为

\\[{\"-bnumber\":\"1\",\"-bname\":\"Genesis\",\"CHAPTER\

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多