小编pol*_*nts的帖子

这个正则表达式如何找到三角形数字?

这是一系列教育正则表达式文章的一部分,这是对嵌套引用概念的温和介绍.

前几个三角形数字是:

 1 = 1
 3 = 1 + 2
 6 = 1 + 2 + 3
10 = 1 + 2 + 3 + 4
15 = 1 + 2 + 3 + 4 + 5
Run Code Online (Sandbox Code Playgroud)

有很多方法可以检查数字是否为三角形.有一种有趣的技术使用正则表达式如下:

  • 给定n,我们首先创建一个长度为n的字符串,其中填充相同的字符
  • 然后我们将此字符串与模式匹配 ^(\1.|^.)+$
    • 当且仅当此模式与字符串匹配时,n为三角形

以下是一些片段,表明它适用于多种语言:

PHP(在ideone.com上)

$r = '/^(\1.|^.)+$/';

foreach (range(0,50) as $n) {
  if (preg_match($r, str_repeat('o', $n))) {
     print("$n ");
  }
}
Run Code Online (Sandbox Code Playgroud)

Java(在ideone.com上)

for (int n = 0; n <= 50; …
Run Code Online (Sandbox Code Playgroud)

c# java regex capturing-group nested-reference

42
推荐指数
1
解决办法
2253
查看次数

是否与空字符串连接进行字符串转换真的那么糟糕?

假设我有两个char变量,后来我想将它们连接成一个字符串.我就是这样做的:

char c1, c2;
// ...

String s = "" + c1 + c2;
Run Code Online (Sandbox Code Playgroud)

我见过有人说"" +"诡计"是"丑陋"等等,你应该使用String.valueOfCharacter.toString代替.我更喜欢这种结构,因为:

  • 如果可能的话,我更喜欢使用语言功能而不是API调用
    • 一般来说,语言通常不比API更稳定吗?
    • 如果语言功能只隐藏API调用,那么更有理由更喜欢它!
      • 更抽象!隐藏很好!
  • 我喜欢它,c1并且c2在视觉上处于同一水平
    • String.valueOf(c1) + c2 建议一些特别的东西 c1
  • 它更短.

真的有一个很好的论据为什么String.valueOf或者Character.toString更喜欢"" +


琐事:在java.lang.AssertionError,下面一行出现7次,每次都有不同的类型:

    this("" + detailMessage);
Run Code Online (Sandbox Code Playgroud)

java string coding-style

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

1/0是合法的Java表达式吗?

以下在我的Eclipse中编译得很好:

final int j = 1/0;
// compiles fine!!!
// throws ArithmeticException: / by zero at run-time
Run Code Online (Sandbox Code Playgroud)

Java的防止了许多"哑代码"从甚至在首位编译(如"Five" instanceof Number不编译),所以其实这甚至没有产生尽可能多的警告是非常令我感到诧异.当您考虑允许在编译时优化常量表达式这一事实时,阴谋会加深:

public class Div0 {
    public static void main(String[] args) {
        final int i = 2+3;
        final int j = 1/0;
        final int k = 9/2;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中编译,上面的代码片段生成以下字节码(javap -c Div0)

Compiled from "Div0.java"
public class Div0 extends java.lang.Object{
public Div0();
  Code:
   0:   aload_0
   1:   invokespecial   #8; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0: …
Run Code Online (Sandbox Code Playgroud)

java divide-by-zero

37
推荐指数
2
解决办法
1万
查看次数

关于null的可比较和比较者合同

Comparable合同规定e.compareTo(null)必须抛出NullPointerException.

来自API:

请注意,这null不是任何类的实例,并且e.compareTo(null)应该抛出一个NullPointerException偶数e.equals(null)返回false.

另一方面,ComparatorAPI没有提及比较时需要发生的事情null.考虑以下尝试采用a的泛型方法Comparable,并Comparator为其null作为最小元素返回.

static <T extends Comparable<? super T>> Comparator<T> nullComparableComparator() {
   return new Comparator<T>() {
      @Override public int compare(T el1, T el2) {
         return
            el1 == null ? -1 :
            el2 == null ? +1 :
            el1.compareTo(el2);
      }
   };
}
Run Code Online (Sandbox Code Playgroud)

这允许我们执行以下操作:

List<Integer> numbers = new ArrayList<Integer>(
   Arrays.asList(3, 2, 1, null, …
Run Code Online (Sandbox Code Playgroud)

java generics null comparable comparator

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

三个值的XOR

进行三向异或的最简单方法是什么?

换句话说,我有三个值,我想结果为true IFF只声明一个三个值是真实的.

到目前为止,这是我提出的:

((a ^ b)&&(a ^ c)&&!(b && c))|| ((b ^ a)&&(b ^ c)&&!(a && c))|| ((c ^ a)&&(c ^ b)&&!(a && b))

是否有更简单的事情做同样的事情?


以下是上述完成任务的证明:

a = true; b = true; c = true
((a ^ b) && (a ^ c) && !(b && c)) || ((b ^ a) && (b ^ c) && !(a && c)) || ((c ^ a) && (c ^ b) && !(a && b))
=> false

a = true; b = …
Run Code Online (Sandbox Code Playgroud)

language-agnostic logic boolean xor boolean-expression

34
推荐指数
4
解决办法
1万
查看次数

在模拟时钟中查找小时和分针之间的角度

我最近接受了这个采访问题:

给定12小时模拟时钟,以度为单位计算小时和分针之间的较小角度.尽你所能精确.

我想知道什么是最简单,最可读,最精确的算法.欢迎使用任何语言的解决方案(但如果您认为有必要,请稍微解释一下).

math floating-point precision angle

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

在BigDecimal.divide期间抛出ArithmeticException

我认为java.math.BigDecimal应该是The Answer™需要用十进制数执行无限精度算术.

请考虑以下代码段:

import java.math.BigDecimal;
//...

final BigDecimal one = BigDecimal.ONE;
final BigDecimal three = BigDecimal.valueOf(3);
final BigDecimal third = one.divide(three);

assert third.multiply(three).equals(one); // this should pass, right?
Run Code Online (Sandbox Code Playgroud)

我希望assert通过,但事实上执行甚至没有到达那里:one.divide(three)原因ArithmeticException被抛出!

Exception in thread "main" java.lang.ArithmeticException:
Non-terminating decimal expansion; no exact representable decimal result.
    at java.math.BigDecimal.divide
Run Code Online (Sandbox Code Playgroud)

事实证明,API中明确记录了此行为:

在这种情况下divide,准确的商可能有一个无限长的十进制扩展; 例如,1除以3.如果商具有非终止十进制扩展并且指定操作以返回精确结果,ArithmeticException则抛出a.否则,返回除法的确切结果,与其他操作一样.

进一步浏览API,人们发现实际上有各种重载divide执行不精确的划分,即:

final BigDecimal third = one.divide(three, 33, RoundingMode.DOWN);
System.out.println(three.multiply(third));
// prints "0.999999999999999999999999999999999"
Run Code Online (Sandbox Code Playgroud)

当然,现在显而易见的问题是"有什么意义?".BigDecimal当我们需要 …

java precision division bigdecimal financial

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

番石榴:设置<K> +功能<K,V> =地图<K,V>?

是否有一种惯用的方式来获取a Set<K>和a Function<K,V>,并获得Map<K,V>实时视图?(即MapSetFunction组合支持,如果例如添加了元素Set,则相应的条目也存在于Map)中.

(Collections2.filter有关实时视图的更多讨论,请参阅


如果不需要实时视图怎么办?有没有比这更好的东西:

public static <K,V> Map<K,V> newMapFrom(Set<K> keys, Function<? super K,V> f) {
    Map<K,V> map = Maps.newHashMap();
    for (K k : keys) {
        map.put(k, f.apply(k));
    }
    return map;
}
Run Code Online (Sandbox Code Playgroud)

java collections guava

33
推荐指数
4
解决办法
6854
查看次数

关于字段的私有静态最终关键字的快速Java问题

我宣布一个字段:

private static final String filename = "filename.txt";
Run Code Online (Sandbox Code Playgroud)

首先,private static final物质的顺序是什么?如果没有,是否有标准接受的序列或惯例?

其次,filename在我的应用程序中是固定的.这是最好的存储价值吗?

java static final private

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

如何从课程中排除某些字符?

假设我想匹配"单词"字符(\w),但排除"_",或匹配空白字符(\s),但排除"\ t".我怎样才能做到这一点?

regex perl character-class

32
推荐指数
1
解决办法
2万
查看次数