小编Duk*_*ing的帖子

{m} {n}("恰好n次"两次)如何工作?

所以,某种方式(玩弄),我发现自己有一个正则表达式 \d{1}{2}.

从逻辑上讲,对我而言,它应该意味着:

(一个数字恰好一次)恰好两次,即一个数字恰好两次.

但事实上,它似乎只是意味着"一个数字恰好一次"(因此忽略了 {2}).

String regex = "^\\d{1}{2}$"; // ^$ to make those not familiar with 'matches' happy
System.out.println("1".matches(regex)); // true
System.out.println("12".matches(regex)); // false
Run Code Online (Sandbox Code Playgroud)

使用可以看到类似的结果 {n}{m,n}或类似.

为什么会这样?它是在regex/Java文档中明确说明的,还是只是Java开发人员即时做出的决定,还是它可能是一个bug?

或者它实际上没有被忽略,它实际上完全意味着什么呢?

并不重要,但它不是全面的正则表达式行为,Rubular做了我所期望的.

注意 - 标题主要用于想要了解其工作原理(不是为什么)的用户的可搜索性.

java regex

77
推荐指数
3
解决办法
3186
查看次数

如何在int数组中找到元素的索引?

如何在类型的Java数组中找到某个值的索引int

我尝试Arrays.binarySearch在我的未排序数组上使用它,它有时只给出正确的答案.

java arrays indexing search

74
推荐指数
6
解决办法
44万
查看次数

在这种情况下,为什么bool而不是bool都返回true?

这是我的代码:

#include <cstring>
#include <iostream>
int main() {
    bool a;
    memset(&a, 0x03, sizeof(bool));
    if (a) {
        std::cout << "a is true!" << std::endl;
    }
    if (!a) {
        std::cout << "!a is true!" << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

它输出:

a is true!
!a is true!
Run Code Online (Sandbox Code Playgroud)

似乎!运算符bool仅反转最后一位,但每个不相等的值0都被视为true.这导致显示的行为,这在逻辑上是错误的.这是实施中的错误,还是规范允许这样做?请注意,memset可以省略,并且行为可能是相同的,因为a包含内存垃圾.

我正在使用gcc 4.4.5,其他编译器可能会采用不同的方式.

c++ boolean

69
推荐指数
2
解决办法
4813
查看次数

如何将String转换为BigInteger?

我试图从标准输入中读取一些非常大的数字并将它们加在一起.

但是,要添加到BigInteger,我需要使用BigInteger.valueOf(long);:

private BigInteger sum = BigInteger.valueOf(0);

private void sum(String newNumber) {
    // BigInteger is immutable, reassign the variable:
    sum = sum.add(BigInteger.valueOf(Long.parseLong(newNumber)));
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但由于BigInteger.valueOf()唯一需要a long,我不能添加大于long最大值的数字(9223372036854775807).

每当我尝试添加9223372036854775808或更多时,我都会得到一个NumberFormatException(完全可以预料到).

有类似的东西BigInteger.parseBigInteger(String)吗?

java string biginteger

65
推荐指数
4
解决办法
17万
查看次数

将列表转换为字符串

我从文件中提取了一些数据,并希望将其写入第二个文件.但我的程序返回错误:

sequence item 1: expected string, list found
Run Code Online (Sandbox Code Playgroud)

这似乎正在发生,因为write()想要一个字符串,但它正在接收一个列表.

那么,关于这段代码,如何将列表转换buffer为字符串以便我可以将内容保存bufferfile2

file = open('file1.txt','r')
file2 = open('file2.txt','w')
buffer = []
rec = file.readlines()
for line in rec :
    field = line.split()
    term1 = field[0]
    buffer.append(term1)
    term2 = field[1]
    buffer.append[term2]
    file2.write(buffer)  # <== error
file.close()
file2.close()
Run Code Online (Sandbox Code Playgroud)

python

62
推荐指数
4
解决办法
8万
查看次数

你如何验证二叉搜索树?

我在这里读到了一个名为验证二叉搜索树的访谈练习.

这究竟是如何工作的?在验证二叉搜索树时会有什么需要?我写了一个基本的搜索树,但从未听说过这个概念.

algorithm binary-search-tree data-structures

60
推荐指数
5
解决办法
7万
查看次数

为什么我必须使用"this"关键字进行前向引用?

当我使用this关键字访问类中的非静态变量时,Java不会给出任何错误.但是当我不使用它时,Java会出错.我为什么要用this

我知道通常应该什么时候使用this,但这个例子与正常用法非常不同.

例:

class Foo {
//  int a = b; // gives error. why ?
    int a = this.b; // no error. why ?
    int b;
    int c = b;

    int var1 = this.var2; // very interesting
    int var2 = this.var1; // very interesting
}
Run Code Online (Sandbox Code Playgroud)

java class this forward-reference

59
推荐指数
2
解决办法
5241
查看次数

如何创建一个封闭(循环)ListView?

我想创建一个自定义ListView(或类似),其行为类似于封闭(循环)的:

  1. 向下滚动 - 在到达最后一个项目后第一个开始(..,n-1,n,1,2,...)
  2. 向上滚动 - 在第一个项目到达后,最后一个开始(...,2,1,1,n,n-1,..)

这在概念上听起来很简单,但显然,没有直接的方法来做到这一点.谁能指出我正确的解决方案?谢谢 !

我已经收到一个答案(来自Streets Of Boston的Android开发者谷歌团体),但听起来有些丑陋:) -

我这样做是通过创建自己的列表适配器(从BaseAdapter子类).

我编写了自己的列表适配器,其getCount()方法返回一个HUUUUGE编号.

如果选择项'x',则此项对应于适配器位置='adapter.getCount()/ 2 + x'

对于我的适配器的方法getItem(int position),我查看我的数组备份适配器并获取索引上的项目:(position-getCount()/ 2)%myDataItems.length

你需要做一些更"特殊"的东西才能使它完全正常工作,但你明白了.

原则上,它仍然可以到达列表的结尾或开头,但如果你将getCount()设置为大约一百万左右,这很难做到:-)

customization android listview circular-buffer

57
推荐指数
3
解决办法
3万
查看次数

为什么我的两个元组包含以相同方式创建的字符串,而不是相等的?

我正在使用 Microsoft Visual C++ 将以下程序编译为 C++20 程序:

#include <iostream>
#include <tuple>

int main()
{
    auto t1 = std::make_tuple("one", "two", "three");
    auto t2 = std::make_tuple("one", "two", "three");
    
    std::cout << "(t1 == t2) is " << std::boolalpha << (t1 == t2) << "\n";
    std::cout << "(t1 != t2) is " << std::boolalpha << (t1 != t2) << "\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我看到以下输出:

(t1 == t2) is false
(t1 != t2) is true
Run Code Online (Sandbox Code Playgroud)

元组是相同的,那么为什么它的比较结果是错误的呢?我该如何解决?

c++ tuples string-literals visual-c++

56
推荐指数
4
解决办法
3627
查看次数

如何删除默认标记?

我正在使用谷歌地图API V3,我注意到有很多标记在这里,即使我不需要它们.例如,某些学校或InfoWindows在点击它们时出现的其他地方.

有什么方法可以删除它们,还是不可能?

google-maps infowindow google-maps-api-3 google-maps-markers

54
推荐指数
2
解决办法
5万
查看次数