我想要实现的是这样的:
>>> 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) 所以我最近开始喜欢语言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 相比,我会期望所有的表达式.NaN
false
false
如何解释这种行为?它背后的理由是什么?
我正在使用一个不断从队列中读取的线程.
就像是:
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()
方法,因为它可能会出现在队列中,并且停止信号可以首先到达(不可取).
有什么建议?
我使用a JTextPane
来显示字符和符号,后者由自定义绘制表示JComponents
.例如,文本窗格可能显示如下内容:
文本窗格是用户可编辑的,允许用户通过任何位置的按钮添加更多符号,并替换所选文本.我是通过这种
JTextPane.insertComponent()
方法做到的.在应用程序的某个时刻,我需要知道文本窗格中当前显示的内容,并且我不仅指输入的文本,还指其中包含的确切组件.
我经历了广泛的麻烦Positions
和DocumentListeners
管理我的文本窗格的内容,但我一直造成比我解决的问题更多的问题.这就是为什么我最终决定,我的麻烦可能是由于我的设计错误,所以我决定看看,如果我无法通过文本窗格访问我的组件.
通过搜索文档和源代码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
及其位置?
假设您有一个名为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:
ninja
相应子包的包.在生产环境中,我们希望能够安装核心和服务器,但不能安装客户端或核心和客户端,而不能安装服务器.我可能会弄错,但就我理解python包而言,使用方法A是不可能的.保持项目分离但兼容,使用具有名称的包似乎很有用ninja_core
,ninja_client …
我有一个管理应用程序Boxes
。该应用程序有一个活动并使用片段作为目的地。它具有(除其他外)以下目的地/片段:
Home
(注册为 topLevelDestination)BoxesManagement
(注册为 topLevelDestination)BoxEdit
从家乡目的地我想提供一个方便的链接来创建一个新盒子。为此,我想BoxEdit
直接链接,但在BoxesManagement
后堆栈中。
由于中间目标只有在作为元素的起始目标<navigation>
时才会落在返回堆栈上,因此我将BoxesManagement
和 (作为起始)放置BoxEdit
在嵌套图中。嵌套图位于单独的文件中,但<include>
位于父图中。然后我用了:
findNavController()
.createDeepLink()
.setDestination(R.id.nav_edit_box)
.createPendingIntent()
.send()
Run Code Online (Sandbox Code Playgroud)
这确实有效,它让我BoxesManagement
在后堆栈中到达所需的目的地。然而,它会导致两个问题:
BoxesManagement
,我看到汉堡菜单图标(如预期)。但是当我使用抽屉菜单导航到 时Home
,什么也没有发生。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已经指出这不受支持。
navigation android navigation-drawer android-navigation-graph
如何更改动态 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) 根据这个官方 kubernetes 文档页面,可以向容器提供“命令”和参数。
该页面出现了 13 次字符串“a command”和 10 次出现“the command”——请注意使用单数。
(除了文件名之外)复数“命令”出现 3 次:
其中一个页面是 Get a Shell to a Running Container,我对此不感兴趣。我对容器的启动命令感兴趣。
其中提到的是在 shell 环境中运行多个管道命令,但是提供的示例使用单个字符串:command: ["/bin/sh"]
。
第三次出现在介绍性句子中:
本页展示了在 Pod 中运行容器时如何定义命令和参数。
command
所有示例(包括给出或省略时如何交互的解释args
)仅显示数组中的单个字符串。它甚至似乎只打算使用单个command
,它将接收所有指定的args
,因为该字段以单数命名。
问题是:为什么这个字段是一个数组?
我认为 Kubernetes 的开发者对此有充分的理由,但我想不出一个。这里发生了什么?是遗产吗?如果是这样,怎么会这样呢?是面向未来的准备吗?如果是这样,那又是为了什么?是为了兼容吗?如果是的话,为了什么呢?
编辑:
正如我在下面的评论中所写的,我现在能想到的唯一原因是:k8s 开发人员希望实现 和 的交互,command
并args
允许用户 在单个参数中指定命令的所有部分具有跨command
和的命令范围args
。所以本质上是功能和可读性之间的折衷。
谁能证实这个假设?
在尝试对线程类进行单元测试时,我决定使用主动等待来控制测试类的行为.对此使用空的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 ×4
python ×2
android ×1
api-design ×1
camelcasing ×1
controller ×1
element ×1
import ×1
jcomponent ×1
jtextpane ×1
kotlin ×1
kubernetes ×1
nan ×1
navigation ×1
package ×1
regex ×1
spring ×1
spring-mvc ×1
swing ×1