在Java中寻找快速,简单的方法来更改此字符串
" hello there "
Run Code Online (Sandbox Code Playgroud)
看起来像这样的东西
"hello there"
Run Code Online (Sandbox Code Playgroud)
我用一个空格替换所有这些多个空格,除了我还希望字符串开头的一个或多个空格不见了.
像这样的东西让我部分在那里
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
Run Code Online (Sandbox Code Playgroud)
但不完全.
Class::getDeclaredConstructor
(http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getDeclaredConstructor-java.lang.Class...-)的javadoc 说:
返回一个Constructor对象,该对象反映此Class对象所表示的类或接口的指定构造函数.[强调我的]
既然你不能为接口声明构造函数,那么返回接口的"指定构造函数"意味着什么呢?
我试过了Runnable.class
,得到了NoSuchMethodException
.是否有getDeclaredConstructor
可以在界面上工作的情况?或者javadoc中的这种语言只是一个错误?或者它是否意味着除了我如何解释它之外的东西?
我以为我知道答案,但是在一小时左右的搜索后我找不到任何确认.
在这段代码中:
public class Outer {
// other code
private void method1() {
final SomeObject obj1 = new SomeObject(...);
final SomeObject obj2 = new SomeObject(...);
someManager.registerCallback(new SomeCallbackClass() {
@Override
public void onEvent() {
System.out.println(obj1.getName());
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
假设registerCallback
将其参数保存在某处,以便匿名子类的对象将存活一段时间.显然,这个对象必须保持一个引用,obj1
以便onEvent
在调用时可以工作.
但是鉴于该对象没有使用obj2
,它是否仍然保持引用obj2
,以便obj2
在对象存在时不能进行垃圾收集?我的印象是所有可见final
(或有效的最终)局部变量和参数都被捕获,因此只要对象存活就无法进行GC,但我找不到任何说明这种或那种方式的东西.
它是依赖于实现的吗?
JLS中有一节可以解答这个问题吗?我无法在那里找到答案.
我今天看到这样的代码:
public class GenClass<T> { ... }
//in some other class
GenClass g = new GenClass<>();
Run Code Online (Sandbox Code Playgroud)
是否<>
在这里都一事无成?通常<>
会告诉编译器根据上下文确定泛型参数,但在这种情况下没有上下文.但显然这是合法的.这和以下有什么区别吗?
GenClass g = new GenClass();
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么这不起作用.我的顶级类是未命名的包(现在;我打算稍后设置包).
Iclass1.java:
public class Iclass1 {
public static class Nested1 {
// whatever
}
}
Run Code Online (Sandbox Code Playgroud)
Iclass2.java:
import Iclass1.*;
public class Iclass2 {
private Nested1 someMember;
// etc.
}
Run Code Online (Sandbox Code Playgroud)
编译完成后Iclass1.java
没有错误,编译器在编译时会抱怨Iclass2.java
:"错误:包Iclass1不存在".
但JLS说:(7.5.2)
import PackageOrTypeName . * ;
Run Code Online (Sandbox Code Playgroud)
PackageOrTypeName必须是包的规范名称(第6.5节),类类型,接口类型,枚举类型或注释类型.
和:(6.7)
在未命名的包中声明的顶级类或顶级接口的完全限定名称是类或接口的简单名称.
对于每个基本类型,命名包,顶级类和顶级接口,规范名称与完全限定名称相同.
因此,似乎Iclass1是我试图在其中使用的类型的规范名称import
.我究竟做错了什么?
(PS我现在认为import static
会更好,但它也不起作用.)
javadoc String.equalsIgnoreCase
说:
如果两个字符串具有相同的长度并且两个字符串中的相应字符等于忽略大小写,则认为两个字符串是相等的忽略大小写.如果至少满足下列条件之一,则两个字符c1和c2被视为相同的忽略大小写:
这两个字符是相同的(通过==运算符进行比较)
将Character.toUpperCase(char)方法应用于每个字符会产生相同的结果
将Character.toLowerCase(char)方法应用于每个字符会产生相同的结果
所以有人能解释一下吗?
public class Test
{
private static void testChars(char ch1, char ch2) {
boolean b1 = (ch1 == ch2 ||
Character.toLowerCase(ch1) == Character.toLowerCase(ch2) ||
Character.toUpperCase(ch1) == Character.toUpperCase(ch2));
System.out.println("Characters match: " + b1);
String s1 = Character.toString(ch1);
String s2 = Character.toString(ch2);
boolean b2 = s1.equalsIgnoreCase(s2);
System.out.println("equalsIgnoreCase returns: " + b2);
}
public static void main(String args[]) {
testChars((char)0x0130, (char)0x0131);
testChars((char)0x03d1, (char)0x03f4);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Characters match: false
equalsIgnoreCase returns: true
Characters match: false
equalsIgnoreCase …
Run Code Online (Sandbox Code Playgroud) javadoc使用doc注释的第一个"句子"作为摘要句子.它假定一个句点后跟空格,制表符或行终止符结束句子.假设我想要一个缩写,例如"eg"或"etc." 在我的总结中; 有没有办法告诉javadoc不要把它当作句子的结尾?我可以用这个时期代替,.
但我想知道是否有一种不那么丑陋的方式.
此示例以两种不同的方式显示两个表.在第一种情况下,一张桌子在另一张桌子之上.在第二个,它们是并排的.两种情况之间的唯一区别是人们使用display: inline-block
; 另外,在第一种情况下,表格<DIV>
用a 分隔padding-bottom
,而在第二种情况下,它们<SPAN>
用a 分隔padding-right
.
<HTML>
<HEAD>
<TITLE>Title</TITLE>
<STYLE type="text/css">
table { border-collapse: collapse; border-style: solid; border-width: thin }
col { border-style: dotted; border-width: thin }
td { padding-left: 0.05in; padding-right: 0.05in }
</STYLE>
</HEAD>
<BODY>
<TABLE>
<COL><COL><COL><COL><COL><COL>
<TR><TD>x<TD>x<TD>x<TD>x<TD>x<TD>x</TABLE>
<DIV style="padding-bottom: 1em"></DIV>
<TABLE>
<COL><COL><COL><COL><COL><COL>
<TR><TD>y<TD>y<TD>y<TD>y<TD>y<TD>y</TABLE>
<DIV style="padding-bottom: 3em"></DIV>
<TABLE style="display: inline-block">
<COL><COL><COL><COL><COL><COL>
<TR><TD>x<TD>x<TD>x<TD>x<TD>x<TD>x</TABLE>
<SPAN style="padding-right: 3em"></SPAN>
<TABLE style="display: inline-block">
<COL><COL><COL><COL><COL><COL>
<TR><TD>y<TD>y<TD>y<TD>y<TD>y<TD>y</TABLE>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
CSS2规范的17.6.2.1 说明了解决折叠边界模型中的边界冲突:
如果没有一个样式是"隐藏的"并且其中至少有一个不是"无",那么将丢弃窄边框以支持更宽的样式.如果有几个具有相同的'border-width',则按此顺序首选样式:'double','solid','dashed','dotted','ridge','outset','groove'和最低: "插页".
这似乎是在第一种情况下工作,其中实心边界胜过表格边缘周围的虚线边界.但在第二种情况下,看起来两个 …
假设我有一个如下所示的程序:
@Component
public class MainAction {
public void doTheAction() {
System.out.println("Now doing the action");
}
}
@Aspect
@Component
public class BeforeAspect {
@Autowired
private Logger logger;
@Before("execution(* thepackagename.MainAction.*(..))")
public void doBefore() {
logger.log("The @Before advice has run");
}
}
@Component
public class Logger {
public void log(String s) {
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我通过的Eclipse(main方法调用esentially运行它,这是工作的罚款mainAction.doTheAction()
后,mainAction
被Spring创建).
现在我想编写一个测试,确保在log
调用时正确doTheAction
调用该方法.我们正在使用JMockit进行测试.(这是我实际遇到的问题的一个非常简化的情况;通过AOP方面调用更复杂的记录器,并且正在记录错误的某些值.在进行修复之前,我正在尝试编写一个测试以确保记录的值是正确的.)
这就是我的(简化)测试目前的样子:
@RunWith(JMockit.class)
@ContextConfiguration(locations = {"classpath:Beans.xml"})
public class MainActionTest {
@Tested
private MainAction mainAction;
@Test
public void testThatLoggerIsCalled(@Injectable Logger …
Run Code Online (Sandbox Code Playgroud) 我想要达到的效果是这样的:我想要一行带有标题的文本,在它下面我想要一个表格。该表格可能太高而无法放入浏览器窗口,因此如有必要,我想要一个垂直滚动条。表格不应太宽,因此不需要水平滚动条(但我仍然希望在必要时显示它)。无论哪种方式,我都不希望标题滚动;因此,出现一个垂直滚动条,我滚动表格,标题应该是固定的。我正在尝试设置一个<div>
其宽度是浏览器决定显示表格所需的任何宽度(标题将小于该宽度)。
这是我尝试过的:
<html>
<head>
<title>Page title</title>
<style type="text/css">
.mytab { border-style: solid; border-collapse: collapse }
table.mytab td { border-style: solid; border-width : 1px;
padding: 5px }
</style>
</head>
<body>
<div style="display: inline-table">
<div style="padding-bottom: 10px; text-align: center">Table title</div>
<div style="height: 100px; overflow: auto">
<table class="mytab">
<tr><th/><th>Data1</th><th>Data2</th><th>Data3</th></tr>
<tr><td>AAAA</td><td>12348173</td><td>7598734</td><td>zioxuoiuf</td></tr>
<tr><td>BBBB</td><td>29834782</td><td>7895232</td><td>kuoiu2kjf</td></tr>
<tr><td>CCCC</td><td>98291123</td><td>io242o2</td><td>982734211</td></tr>
</table>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
(我最终希望表格的高度超过 100 像素,但我设置了它以便我可以测试滚动条。)
这在 Chrome (53.0.2785.116 m) 中实现了我想要的,但在 Firefox (49.0.1) 中没有。在 Chrome 中,浏览器似乎会计算出表格的宽度,然后在其右侧添加一个垂直滚动条。在Firefox中,它出现在浏览器计算出有多宽,使表,但随后持仓垂直滚动条里面那个宽度的盒子,模糊表的一部分。然后它会附加一个水平滚动条,因为您无法看到所有表格。
与 Chrome 的外观:
Firefox 外观:
(对我来说,Firefox 在垂直方向上显示较少的表格并不重要。但我绝对不希望水平滚动条出现,除非有必要。)
我该如何解决这个问题,让它在 Firefox …
java ×7
html ×2
css ×1
generics ×1
html-table ×1
javadoc ×1
jmockit ×1
junit ×1
reflection ×1
regex ×1
replace ×1
spring-aop ×1
string ×1