小编Apl*_*nus的帖子

如何在python中拆分CamelCase

我想要实现的是这样的:

>>> camel_case_split("CamelCaseXYZ")
['Camel', 'Case', 'XYZ']
>>> camel_case_split("XYZCamelCase")
['XYZ', 'Camel', 'Case']
Run Code Online (Sandbox Code Playgroud)

所以我搜索并找到了这个完美的正则表达式:

(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])
Run Code Online (Sandbox Code Playgroud)

作为我尝试的下一个逻辑步骤:

>>> re.split("(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])", "CamelCaseXYZ")
['CamelCaseXYZ']
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用,如何从python中的链接问题获得结果?

编辑:解决方案摘要

我用一些测试用例测试了所有提供的解决方案:

string:                 ''
AplusKminus:            ['']
casimir_et_hippolyte:   []
two_hundred_success:    []
kalefranz:              string index out of range # with modification: either [] or ['']

string:                 ' '
AplusKminus:            [' ']
casimir_et_hippolyte:   []
two_hundred_success:    [' ']
kalefranz:              [' ']

string:                 'lower'
all algorithms:         ['lower']

string:                 'UPPER'
all algorithms:         ['UPPER']

string:                 'Initial'
all algorithms:         ['Initial']

string:                 'dromedaryCase'
AplusKminus:            ['dromedary', 'Case']
casimir_et_hippolyte:   ['dromedary', …
Run Code Online (Sandbox Code Playgroud)

python regex camelcasing

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

比较Kotlin中的NaN

所以我最近开始喜欢语言kotlin.今天,在比较双打时,我遇到了不可避免的事情NaN.

fun main(args: Array<String>) {
    val nan = Double.NaN
    println("1: " + (nan == nan))
    println("2: " + (nan == (nan as Number)))
    println("3: " + ((nan as Number) == nan))
}
Run Code Online (Sandbox Code Playgroud)

NB :( Double 是子类型 )Number

运行上面的代码会产生:

1: false
2: true
3: true
Run Code Online (Sandbox Code Playgroud)

我理解与Java 相比,我会期望所有的表达式.NaNfalsefalse

如何解释这种行为?它背后的理由是什么?

floating-point nan kotlin

12
推荐指数
2
解决办法
1649
查看次数

在Java中停止循环线程

我正在使用一个不断从队列中读取的线程.

就像是:

public void run() {
    Object obj;
    while(true) {
        synchronized(objectsQueue) {
            if(objectesQueue.isEmpty()) {
                try {
                    objectesQueue.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                obj = objectesQueue.poll();
            }
        }

        // Do something with the Object obj
    }
}
Run Code Online (Sandbox Code Playgroud)

停止此线程的最佳方法是什么?

我看到两个选择:

1 - 由于Thread.stop()不推荐使用,我可以实现一个stopThisThread()使用原子检查条件变量的方法.

2 - 将死亡事件对象或类似内容发送到队列.当线程获取死亡事件时,它将退出.

我更喜欢第一种方式,但是,我不知道何时调用该stopThisThread()方法,因为它可能会出现在队列中,并且停止信号可以首先到达(不可取).

有什么建议?

java multithreading

7
推荐指数
1
解决办法
8795
查看次数

从JTextPane通过javax.swing.text.Element获取组件?

我使用a JTextPane来显示字符和符号,后者由自定义绘制表示JComponents.例如,文本窗格可能显示如下内容: 在此输入图像描述 文本窗格是用户可编辑的,允许用户通过任何位置的按钮添加更多符号,并替换所选文本.我是通过这种JTextPane.insertComponent()方法做到的.在应用程序的某个时刻,我需要知道文本窗格中当前显示的内容,并且我不仅指输入的文本,还指其中包含的确切组件.

我经历了广泛的麻烦PositionsDocumentListeners管理我的文本窗格的内容,但我一直造成比我解决的问题更多的问题.这就是为什么我最终决定,我的麻烦可能是由于我的设计错误,所以我决定看看,如果我无法通过文本窗格访问我的组件.

通过搜索文档和源代码AbstractDocument以及其他相关类,我找到了界面javax.swing.text.Element.然后我让我的应用程序输出

for(int i = 0; i < textPane.getDocument().getLength(); i++) {
    System.out.println(((StyledDocument) textPane.getDocument()).getCharacterElement(i));
}
Run Code Online (Sandbox Code Playgroud)

这给了我:

LeafElement(内容)0,4

LeafElement(内容)0,4

LeafElement(内容)0,4

LeafElement(内容)0,4

LeafElement(组件)4,5

LeafElement(内容)5,9

LeafElement(内容)5,9

LeafElement(内容)5,9

LeafElement(内容)5,9

LeafElement(组件)9,10

看到LeafElements我所做的事情似乎有关于在哪个位置显示的内容的某种信息Document,我认为必须能够获得该位置的实际内容.在搜索了另外半个小时后如何获得每个元素代表的内容后,我放弃了并决定在这里发布我的问题,希望你们中的一些人可能知道如何实现这个目标!?

我已经看到这个问题,有人试图访问组件textPane.getComponents(),它返回一个组件数组,其中包含实际包含的组件的确切数量JTextPane,但它们都是类型javax.swing.text.ComponentView$Invalidator,这显然对我没用.也许我只是不知道如何从这里正确地继续,因为对我的符号的原始类型的强制转换不起作用.

TL;博士

如何从文本窗格中获取a JComponent,它位于文本内部JTextPane及其位置?

java swing element jtextpane jcomponent

5
推荐指数
1
解决办法
2198
查看次数

不同项目的python库如何在同一个包中?

假设您有一个名为Ninja的大型(python)软件项目.项目的几个部分如服务器客户端,还有一个通用的基础结构库,它包含公共类和工具.当然,我会创建一个这样的包结构:ninja.core,ninja.server并且ninja.client,服务器客户端都ninja.core以某种方式导入.出于开发目的(我们将eclipse与Subversion一起使用),核心,服务器客户端都在不同的项目中进行维护,从而产生如下文件夹结构:

eclipse_workspace
|
>-Ninja_core
| |
| >-ninja
|   |
|   >-core
|
>-Ninja_client
| |
| >-ninja
|   |
|   >-client
.
.
.
Run Code Online (Sandbox Code Playgroud)

有一个java背景我认为这是可能的,但事实证明(读:导入错误)这不起作用.正如在这个答案中所指出的,通常不可能同时具有这两者ninja.core,ninja.client 除非它们是同一包装的子包装ninja,否则它们不是.这导致:

方法A:

  • 将整个代码放在一个eclipse/svn项目中,并且只有一个包含ninja相应子包的包.

在生产环境中,我们希望能够安装核心服务器,但不能安装客户端核心客户端,而不能安装服务器.我可能会弄错,但就我理解python包而言,使用方法A是不可能的.保持项目分离但兼容,使用具有名称的包似乎很有用ninja_core,ninja_client …

python import package

5
推荐指数
1
解决办法
123
查看次数

Android 导航 - 如何深入两个目的地?

我有一个管理应用程序Boxes。该应用程序有一个活动并使用片段作为目的地。它具有(除其他外)以下目的地/片段:

  • Home(注册为 topLevelDestination)
  • BoxesManagement(注册为 topLevelDestination)
  • BoxEdit

从家乡目的地我想提供一个方便的链接来创建一个新盒子。为此,我想BoxEdit直接链接,但在BoxesManagement后堆栈中。

尝试 1 - 显式深层链接

由于中间目标只有在作为元素的起始目标<navigation>时才会落在返回堆栈上,因此我将BoxesManagement和 (作为起始)放置BoxEdit在嵌套图中。嵌套图位于单独的文件中,但<include>位于父图中。然后我用了:

findNavController()
    .createDeepLink()
    .setDestination(R.id.nav_edit_box)
    .createPendingIntent()
    .send()
Run Code Online (Sandbox Code Playgroud)

这确实有效,它让我BoxesManagement在后堆栈中到达所需的目的地。然而,它会导致两个问题:

  • 应用程序再次启动。至少我认为会发生这种情况,因为整个屏幕闪烁的时间非常短。这种行为让我假设我不应该使用深层链接进行应用内导航。(这并不奇怪,因为文档从未暗示过这个用例。)
  • 当我返回 时BoxesManagement,我看到汉堡菜单图标(如预期)。但是当我使用抽屉菜单导航到 时Home,什么也没有发生。

尝试 2 - 直接导航

findNavController()
    .navigate(R.id.nav_box_edit)
Run Code Online (Sandbox Code Playgroud)

这不起作用,并且简单地失败:

java.lang.IllegalArgumentException: Navigation action/destination <APP-PKG>:id/nav_box_edit cannot be found from the current destination Destination(<APP-PKG>:id/nav_home) label=Home class=<APP-PKG>.ui.HomeFragment 
Run Code Online (Sandbox Code Playgroud)

我并不感到惊讶,因为Google 的 Murat Yener已经指出这不受支持。

尝试 2b - 设置图表 …

navigation android navigation-drawer android-navigation-graph

5
推荐指数
1
解决办法
1335
查看次数

spring mvc请求映射动态url

如何更改动态 URL 的请求映射?URL 可能如下所示:

当 url 采用这种格式时,控制器的工作语法如下:

http://zz.zz.zz.com:8080/webapp/test?Id=2&maxrows=5

@RequestMapping(value = "/test", method = RequestMethod.GET)
public @ResponseBody void test(
    @RequestParam(value = "Id", required = true) String Id,
    @RequestParam(value = "maxrows", required = true) int maxrows
) throws Exception {
        System.out.println("Id: " + Id + " maxrows: " + maxrows);
}
Run Code Online (Sandbox Code Playgroud)

java spring controller spring-mvc

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

为什么 k8s 容器规范“命令”字段是一个数组?

根据这个官方 kubernetes 文档页面,可以向容器提供“命令”和参数。

该页面出现了 13 次字符串“a command”和 10 次出现“the command”——请注意使用单数。

(除了文件名之外)复数“命令”出现 3 次:

  1. 其中一个页面是 Get a Shell to a Running Container,我对此不感兴趣。我对容器的启动命令感兴趣。

  2. 其中提到的是在 shell 环境中运行多个管道命令,但是提供的示例使用单个字符串:command: ["/bin/sh"]

  3. 第三次出现在介绍性句子中:

本页展示了在 Pod 中运行容器时如何定义命令和参数。

command所有示例(包括给出或省略时如何交互的解释args)仅显示数组中的单个字符串。它甚至似乎只打算使用单个command,它将接收所有指定的args,因为该字段以单数命名。

问题是:为什么这个字段是一个数组?

我认为 Kubernetes 的开发者对此有充分的理由,但我想不出一个。这里发生了什么?是遗产吗?如果是这样,怎么会这样呢?是面向未来的准备吗?如果是这样,那又是为了什么?是为了兼容吗?如果是的话,为了什么呢?

编辑:

正如我在下面的评论中所写的,我现在能想到的唯一原因是:k8s 开发人员希望实现 和 的交互,commandargs允许用户 单个参数中指定命令的所有部分具有跨command和的命令范围args。所以本质上是功能和可读性之间的折衷。

谁能证实这个假设?

api-design kubernetes

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

当条件由其他线程设置时,为什么Java中的空时不会中断?

在尝试对线程类进行单元测试时,我决定使用主动等待来控制测试类的行为.对此使用空的while语句无法按照我的意图执行操作.所以我的问题是:

为什么第一个代码没有完成,但第二个代码呢?

有一个类似的问题,但它没有真正的答案也没有MCVE,而且更具体.

没有完成:

public class ThreadWhileTesting {

    private static boolean wait = true;

    private static final Runnable runnable = () -> {
        try {Thread.sleep(50);} catch (InterruptedException ignored) {}
        wait = false;
    };

    public static void main(String[] args) {
        wait = true;
        new Thread(runnable).start();
        while (wait); // THIS LINE IS IMPORTANT
    }
}
Run Code Online (Sandbox Code Playgroud)

完成:

public class ThreadWhileTesting {

    private static boolean wait = true;

    private static final Runnable runnable = () -> {
        try {Thread.sleep(50);} catch (InterruptedException ignored) …
Run Code Online (Sandbox Code Playgroud)

java multithreading

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