我必须在字符串中找到空格,这包括使用Javascript的输入,制表符和空格。我有这个代码来查找空格
function countThis() {
var string = document.getElementById("textt").value;
var spaceCount = (string.split(" ").length - 1);
document.getElementById("countRedundants").value = spaceCount;
}
这样可以正常工作,并给出了总空格数。
问题是,如果空格/输入/标签彼此相邻,我希望它只计数一次。我无法解决这个问题,并希望得到一些帮助或指出正确的方向。
谢谢,古斯塔夫
答案 0 :(得分:3)
Tou可以在split
中使用正则表达式:
var spaceCount = (string.split(/\s+/gi).length - 1);
答案 1 :(得分:1)
使用正则表达式来实现这一目标。 例如,您可以检查一个或多个制表符,空格或换行符的匹配数,并使用它们的计数。
正则表达式规则是:[\t\s\n]+
- 意味着一个或多个标签,空格或换行符合规则。
对于JavaScript:
var test = "Test Test Test\nTest\nTest\n\n";
var spacesCount = test.split(/[\t\s\n]+/g).length - 1;
console.log(spacesCount);
正则表达式是一种非常有效的方法。或者,您必须手动迭代对象,并尝试匹配存在一个或多个空格,制表符或换行符的情况。
考虑到你正在尝试做的事情,在编译器中使用,以便将特定字符序列识别为特定元素,称为标记。这种做法称为词法分析或标记化。由于正则表达式存在,因此无需手动执行此检查,除非您想要执行非常高级或特定的操作。
答案 2 :(得分:1)
这是一个丑陋的解决方案,没有使用任何正则表达式,性能方面它是最佳的,但它可以更加pythonic。
def countThis(s):
count = 0
i = 0
while i < len(s):
while i < len(s) and not s[i].isspace():
i += 1
if i < len(s):
count += 1
i += 1
while i < len(s) and s[i].isspace():
i += 1
return count
print(countThis("str"))
print(countThis(" str toto"))
print(countThis("Hello, world!"))
答案 3 :(得分:1)
Stéphane Ammar's solution可能是最简单的,但如果你想要更高效的东西:
function countGaps(str) {
let gaps = 0;
const isWhitespace = ch => ' \t\n\r\v'.indexOf(ch) > -1;
for (let i = 0; i < str.length; i++)
if (isWhitespace(str[i]) && !isWhitespace(str[i - 1]))
++gaps;
return gaps;
}