所以,某种方式(玩弄),我发现自己有一个正则表达式 \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数组中找到某个值的索引int?
我尝试Arrays.binarySearch在我的未排序数组上使用它,它有时只给出正确的答案.
这是我的代码:
#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,其他编译器可能会采用不同的方式.
我试图从标准输入中读取一些非常大的数字并将它们加在一起.
但是,要添加到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)吗?
我从文件中提取了一些数据,并希望将其写入第二个文件.但我的程序返回错误:
sequence item 1: expected string, list found
Run Code Online (Sandbox Code Playgroud)
这似乎正在发生,因为write()想要一个字符串,但它正在接收一个列表.
那么,关于这段代码,如何将列表转换buffer为字符串以便我可以将内容保存buffer到file2?
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) 我在这里读到了一个名为验证二叉搜索树的访谈练习.
这究竟是如何工作的?在验证二叉搜索树时会有什么需要?我写了一个基本的搜索树,但从未听说过这个概念.
当我使用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) 我想创建一个自定义ListView(或类似),其行为类似于封闭(循环)的:
这在概念上听起来很简单,但显然,没有直接的方法来做到这一点.谁能指出我正确的解决方案?谢谢 !
我已经收到一个答案(来自Streets Of Boston的Android开发者谷歌团体),但听起来有些丑陋:) -
我这样做是通过创建自己的列表适配器(从BaseAdapter子类).
我编写了自己的列表适配器,其getCount()方法返回一个HUUUUGE编号.
如果选择项'x',则此项对应于适配器位置='adapter.getCount()/ 2 + x'
对于我的适配器的方法getItem(int position),我查看我的数组备份适配器并获取索引上的项目:(position-getCount()/ 2)%myDataItems.length
你需要做一些更"特殊"的东西才能使它完全正常工作,但你明白了.
原则上,它仍然可以到达列表的结尾或开头,但如果你将getCount()设置为大约一百万左右,这很难做到:-)
我正在使用 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)
元组是相同的,那么为什么它的比较结果是错误的呢?我该如何解决?
我正在使用谷歌地图API V3,我注意到有很多标记在这里,即使我不需要它们.例如,某些学校或InfoWindows在点击它们时出现的其他地方.
有什么方法可以删除它们,还是不可能?
google-maps infowindow google-maps-api-3 google-maps-markers
java ×4
c++ ×2
algorithm ×1
android ×1
arrays ×1
biginteger ×1
boolean ×1
class ×1
google-maps ×1
indexing ×1
infowindow ×1
listview ×1
python ×1
regex ×1
search ×1
string ×1
this ×1
tuples ×1
visual-c++ ×1