小编nha*_*tdh的帖子

将正则表达式转换为兼容java的正则表达式的简便方法?

我有一个在Python/Ruby/PHP中定义的正则表达式,就像这样

"(forumdisplay.php\?.*page=%CURRENTPAGE%)"
Run Code Online (Sandbox Code Playgroud)

当我为Java做这件事时,我必须双重逃避该问号 \\?

像这样:

"(forumdisplay.php\\?.*page=%CURRENTPAGE%)";
Run Code Online (Sandbox Code Playgroud)

有没有我可以用来自动完成的功能?或者我是否需要更改所有正则表达式以使用Java正则表达式引擎?

java regex

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

Java正则表达式首先匹配

如何告诉以下正则表达式只找到FIRST匹配?以下代码继续在字符串中查找所有可能的正则表达式.

即我只寻找子串的索引 (200-800;50]

public static void main(String[] args) {

    String regex = "(\\[|\\().+(\\]|\\))";

    String testName=  "DCGRD_(200-800;50]MHZ_(PRE|PST)_(TESTMODE|REG_3FD)";

            Pattern pattern = 
            Pattern.compile(regex);

            Matcher matcher = 
            pattern.matcher(testName);

            boolean found = false;

            while (matcher.find()) {
                System.out.format("I found the text" +
                    " \"%s\" starting at " +
                    "index %d and ending at index %d.%n",
                    matcher.group(),
                    matcher.start(),
                    matcher.end());
                found = true;

            }

            if (!found){
                System.out.println("Sorry, no match!");
            }
}
Run Code Online (Sandbox Code Playgroud)

java regex string

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

java replaceAll不适用于\n字符

我有一个这样的字符串:John \n Barber现在我想用实际的新行字符替换\n,这样它就会变成

John

理发师

这是我的代码

replaceAll("\\n", "\n");
Run Code Online (Sandbox Code Playgroud)

但它不起作用,并给我相同的字符串 John \n Barber

java regex string replaceall

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

Java Scanner问题

如何将扫描仪的分隔符设置为; 还是新线?

我试过了: Scanner.useDelimiter(Pattern.compile("(\n)|;")); 但它不起作用.

java regex java.util.scanner

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

内心任务不好吗?

我们与同事讨论内部任务,例如:

return result = myObject.doSomething();
Run Code Online (Sandbox Code Playgroud)

要么

if ( null == (point = field.getPoint()) )
Run Code Online (Sandbox Code Playgroud)

这些是可以接受的,还是应该用以下内容代替?为什么?

int result = myObject.doSomething();
return result;
Run Code Online (Sandbox Code Playgroud)

要么

Point point = field.getPoint();
if ( null == point)
Run Code Online (Sandbox Code Playgroud)

java coding-style

10
推荐指数
5
解决办法
7763
查看次数

如何删除列表中的第一个和最后一个项目?

我有名单

['Q 0006 005C 0078 0030 0030 0033 0034 ONE_OF 0002 '] 
Run Code Online (Sandbox Code Playgroud)

如何删除第一个元素,Q以及0002最后一个元素?

python

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

通过Cygwin在Windows上进行Hadoop配置

我试图在我的Windows 7机器上配置Hadoop.我能够启动名称节点和其他服务,但是当我运行Hadoop包(版本1.0.3)附带的示例时,会出现以下错误:

bin/hadoop: line 320 : C:\Program: Command not found. 
Run Code Online (Sandbox Code Playgroud)

我使用以下命令运行该示例:

bin/hadoop jar hadoop-examples-1.0.3.jar pi 10
Run Code Online (Sandbox Code Playgroud)

我打开了这个hadoop错误发生的文件,发现第320行正在生成一个路径:

JAVA_PLATFORM=`CLASSPATH=${CLASSPATH} ${JAVA} -Xmx32m ${HADOOP_JAVA_PLATFORM_OPTS} org.apache.hadoop.util.PlatformName | sed -e "s/ /_/g"`
Run Code Online (Sandbox Code Playgroud)

所以我觉得问题可能在这个JAVA变量中,因为Cygwin对路径名使用不同的约定.有没有人也遇到过这个问题或者知道是什么导致了这个问题?

cygwin hadoop windows-7

10
推荐指数
1
解决办法
5962
查看次数

Pattern/Matcher group()在Java中获取子字符串?

更新:感谢所有伟大的回应!我尝试了许多不同的正则表达式模式,但不明白为什么m.matches()没有做我认为它应该做的事情.当我切换到m.find()时,以及调整正则表达式模式,我能够到达某个地方.


我想匹配Java字符串中的模式,然后使用正则表达式提取匹配的部分(如Perl的$&运算符).

这是我的源字符串"s":DTSTART;TZID=America/Mexico_City:20121125T153000 我想提取"America/Mexico_City"部分.

我以为我可以使用Pattern和Matcher,然后使用m.group()提取,但它没有按照我的预期工作.我尝试使用不同的正则表达式字符串进行修改,而m.matches()上似乎唯一的东西".*TZID.*"是没有意义的,因为它只返回整个字符串.有人可以开导我吗?

 Pattern p = Pattern.compile ("TZID*:"); // <- change to "TZID=([^:]*):"
 Matcher m = p.matcher (s);
 if (m.matches ()) // <- change to m.find()
    Log.d (TAG, "looking at " + m.group ()); // <- change to m.group(1)
Run Code Online (Sandbox Code Playgroud)

java regex string match

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

我是否被迫使用pthread_cond_broadcast(超过pthread_cond_signal)以保证*my*thread被唤醒?

在一些QT GUI线程(一个pthread线程)与一些C代码连接的上下文中,我偶然发现了以下问题:我启动了QT Gui线程,在我的C线程恢复其路径之前,我需要确保所有的QT Gui线程中的图形对象已经被构造出来并且它们是有效的QObject(因为C代码将调用QObject:connect()它们).

引言旁边,等待是通过一个pthread_cond_wait()+一个条件变量+一个C线程中的一个相关互斥:

int isReady=0;
pthread_mutex_lock(&conditionReady_mutex);
while(isReady==0) {
    pthread_cond_wait(&conditionReady_cv, &conditionReady_mutex);
}
pthread_mutex_unlock(&conditionReady_mutex);
Run Code Online (Sandbox Code Playgroud)

另一方面,QT Gui线程构造其图形对象,然后用以下信号发出信号:

pthread_mutex_lock(&conditionReady_mutex);
isReady=1;
pthread_cond_broadcast(&conditionReady_cv);
pthread_mutex_unlock(&conditionReady_mutex);
Run Code Online (Sandbox Code Playgroud)

基本的东西,如你所见.但问题是:在Qt Gui线程中,我一直在使用pthread_cond_broadcast(),以确保我的C线程被唤醒,当然.是的,在我当前的应用程序中,我只有一个C线程和一个Qt Gui线程,并且pthread_cond_signal()应该完成唤醒C线程的工作(因为它保证唤醒至少一个线程,并且C线程是唯一的一).

但是,在更一般的上下文中,假设我有三个C线程,但我希望它们中的一个(或两个)被唤醒.一个(两个)特定线程.我该如何确保?

如果我使用pthread_cond_signal(),那可能只是唤醒第三个线程,这将完全忽略这一点,因为我感兴趣的一个线程没有被唤醒.OTOH,唤醒所有线程,甚至那些不需要的线程,这些都是pthread_cond_broadcast()过度的.

有一种方法可以告诉pthread_cond_signal()哪个线程被唤醒?

或者,我是否应该引入更多的条件变量,以便在唤醒的线程组中获得更精细的粒度pthread_cond_broadcast()

谢谢.

c qt pthreads

9
推荐指数
1
解决办法
1973
查看次数

舍入到Haskell中的特定位数

我正在尝试创建一个函数来将浮点数舍入到定义的数字长度.到目前为止我得出的是:

import Numeric;

digs :: Integral x => x -> [x] <br>
digs 0 = [] <br>
digs x = digs (x `div` 10) ++ [x `mod` 10]

roundTo x t = let d = length $ digs $ round x <br>
                  roundToMachine x t = (fromInteger $ round $ x * 10^^t) * 10^^(-t)
              in roundToMachine x (t - d)
Run Code Online (Sandbox Code Playgroud)

我正在使用该digs函数来确定逗号之前的数字位数以优化输入值(即将所有内容移到逗号之外,因此1.234变为0.1234 * 10^1)

roundTo函数似乎适用于大多数输入,但是对于某些输入,我得到奇怪的结果,例如roundTo 1.0014 4生成1.0010000000000001而不是1.001 …

math haskell

9
推荐指数
2
解决办法
4380
查看次数