- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试解决 wordEnds
from codingbat.com使用正则表达式。
Given a string and a non-empty word string, return a string made of each char just before and just after every appearance of the word in the string. Ignore cases where there is no char before or after the word, and a char may be included twice if it is between two words.
wordEnds("abcXY123XYijk", "XY") → "c13i"
wordEnds("XY123XY", "XY") → "13"
wordEnds("XY1XY", "XY") → "11"
wordEnds("XYXY", "XY") → "XY"
这是最简单的,因为我可以用我目前的正则表达式知识来做到这一点:
public String wordEnds(String str, String word) {
return str.replaceAll(
".*?(?=word)(?<=(.|^))word(?=(.|$))|.+"
.replace("word", java.util.regex.Pattern.quote(word)),
"$1$2"
);
}
replace
用于放置在实际的 word
中字符串到模式中以提高可读性。 Pattern.quote
不需要通过他们的测试,但我认为这是基于正则表达式的正确解决方案所必需的。
正则表达式有两个主要部分:
.*?
”,word
仍然可以找到“(?=word)
”,然后向后查找以捕获紧接在其“(?<=(.|^))
”之前的任何字符,匹配“word
”,并期待捕获其后面的任何字符“(?=(.|$))
”。
word
时原子后向才会捕获。 |.+
”
我认为这在所有情况下都有效,但显然相当复杂。我只是想知道其他人是否可以建议一个更简单的正则表达式来做到这一点。
注意:我不是在寻找使用 indexOf
的解决方案和一个循环。我想要一个基于正则表达式的 replaceAll
解决方案。我还需要一个可以通过所有codingbat 测试的有效正则表达式。
我设法减少了 word
的出现在模式内只有一个。
".+?(?<=(^|.)word)(?=(.?))|.+"
我仍在寻找是否可以进一步简化它,但我还有另一个问题:
.|$
到只是.?
成功了,但如果我同样尝试简化 ^|.
至.?
它不起作用。这是为什么?最佳答案
根据您的解决方案,我设法简化了代码:
public String wordEnds(String str, String word) {
return str.replaceAll(".*?(?="+word+")(?<=(.|^))"+word+"(?=(.|$))|.+","$1$2");
}
另一种写法是:
public String wordEnds(String str, String word) {
return str.replaceAll(
String.format(".*?(?="+word+")(?<=(.|^))"+word+"(?=(.|$))|.+",word),
"$1$2");
}
关于java - 使用正则表达式的codingbat wordEnds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2566482/
我显然缺少一个“if”语句,但我不知道如何涵盖茶或糖果不是彼此的两倍: Java > Logic-1 > teaParty 我们正在举办一个有大量茶和糖果的聚会。返回编码为 0=bad、1=good
我正在尝试编码 bat 问题repeatFront: Given a string and an int n, return a string made of the first n characte
这是问题; http://codingbat.com/prob/p153748 给定两个 int,每个都在 10..99 范围内,如果有一个数字出现在两个数字中,例如 12 和 23 中的 2,则返回
我正在 codingbat 上解决这个问题它表明我的代码适用于所有情况,但不适用于其他情况。 Given an array of ints, return true if the value 3 ap
我目前正在 codingbat 网站上做一个练习,上面写着: Given an array of ints, compute recursively if the array contains a 6
我正在尝试解决 this CodingBat问题: Squirrels who like to party get together and smoke cigars. Such a party is
对于模棱两可的标题,我深表歉意,我想不出更具体的东西。 为了更好地递归解决问题,我一直在处理 CodingBat 上发布的问题.我的问题与以下问题的变体有关。 original problem是: G
给定任务sameEnds来自 CodingBat: 给定一个字符串,返回出现在字符串开头和结尾且不重叠的最长子字符串。例如,sameEnds("abXab") 是 "ab"。 sameEnds("ab
我正在codingbat.com 上解决Java 问题,并且在这个问题上停止了,scoresAverage。由于练习描述有点复杂,我就直接粘贴在这里: Given an array of scores
我正在做codingbat作为我即将进行的测验的练习。我正在使用递归来解决递归问题,但我的老师说我应该能够使用其他循环来解决这些问题。我认为我应该使用 for 循环,因为它们可以轻松实现相同的结果。
嘿伙计们,我希望有人能向我解释这段代码中的错误?我只是有点难以理解为什么它会抛出异常。 最佳答案 第一个条件检查字符串的最小长度,应为 3。因此“bad”和“xba”通过第一个条件。 让我们先讨论ba
这类似于我之前的努力(wordEnds 和 repeatEnd):作为一种脑力练习,我想仅使用正则表达式来解决这个玩具问题。 Description from codingbat.com : Give
所以基本上,我一直在研究这些 codingBat 问题,当我真的遇到困难时,我通常会检查解决方案并跟踪逻辑,这帮助我不会陷入后来使用类似想法的问题。 这个最大镜像问题对我个人来说不像其他问题;我不知道
我开始学习使用 Java。 我在codingbat ( http://codingbat.com/prob/p123384 ) 中遇到了一个问题:这是我的代码 public String frontB
这是我的任务:给定一个字符串,“xyz”是否出现在字符串的中间?为了定义 middle,我们会说“xyz”左侧和右侧的字符数最多只能相差 1。 使用下面的代码可以看到问题描述和其他用例中的失败here
下面是我用于 no_teen_sum 和后续 fixed_teen 函数的代码。 第一个代码是我提交的 - 并且适用于所有测试用例: def no_teen_sum(a, b, c): # che
我有点困惑为什么我的下面的解决方案没有给出正确的答案。我做了一些挖掘,我猜这与调用的工作方式有关?我认为这两种方式是相同的,但事实并非如此,但我不完全理解我的错误返回的是什么。这是我之前做的研究:ht
如果字符串“cat”和“dog”在给定字符串中出现相同的次数,则返回 True。 这是我正在尝试的问题。我的代码是: def cat_dog(str): count1 = 0 coun
我正在尝试解决这个 CodingBat 问题: (This is a slightly harder version of the fix34 problem.) Return an array th
我试图尽可能多地理解正则表达式,所以我想出了这个基于正则表达式的解决方案来解决 codingbat.com repeatEnd : Given a string and an int N, retur
我是一名优秀的程序员,十分优秀!