我有一个字符串,说:
String s = "0123456789";
Run Code Online (Sandbox Code Playgroud)
我想用格式化程序填充它.我可以这两种方式:
String.format("[%1$15s]", s); //returns [ 0123456789]
Run Code Online (Sandbox Code Playgroud)
要么
String.format("[%1$-15s]", s); // returns [0123456789 ]
Run Code Online (Sandbox Code Playgroud)
如果我想截断我做的文字
String.format("[%1$.5s]", s); // returns [01234]
Run Code Online (Sandbox Code Playgroud)
如果我想从左边截断,我想我可以这样做:
String.format("[%1$-.5s]", s); // throws MissingFormatWidthException
Run Code Online (Sandbox Code Playgroud)
但这失败了,所以我尝试了这个:
String.format("[%1$-0.5s]", s); // throws MissingFormatWidthException
Run Code Online (Sandbox Code Playgroud)
以及:
String.format("[%1$.-5s]", s); // throws UnknownFormatConversionException
Run Code Online (Sandbox Code Playgroud)
那么如何使用格式标志从左侧截断?
有没有人知道如何使用log4j的config xml为MDC中的缺失条目指定默认值?我在我的XML文件中定义了一个appender,如下所示:
<appender name="DBAppender" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:sqlserver://phenom\\MSSQLSERVER_2012\;databaseName=pickmax_express" />
<param name="Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<param name="User" value="user" />
<param name="Password" value="password" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="INSERT INTO LOG (source, message, order_id, log_level) VALUES ( 'TESTSOURCE','%m', %X{orderID}, 0)"
/>
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
有问题的部分是来自MDC的订单ID(%X {orderID}).我四处搜索,只发现同一个线程的副本说了一些类似于$$ {orderID:-DefaultValue}的内容,但这在这个上下文中不起作用.我需要能够在没有订单ID的上下文中收到日志消息时将值默认为0或-1或其他一些sentinal值
我有一个关于Action
C#中类型和Lambdas 的快速问题.这是代码:
static void Main(string[] args)
{
List<Action> actions = new List<Action>();
for (int I = 0; I < 10; I++)
actions.Add(new Action(() => Print(I.ToString())));
foreach (Action a in actions)
{
a.Invoke();
}
actions.Clear();
int X;
for (X = 0; X < 10; X++)
{
int V = X;
actions.Add(new Action(() => Print(V.ToString())));
}
foreach (Action a in actions)
{
a.Invoke();
}
Console.ReadLine();
}
public static void Print(string s)
{
Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)
如果运行此代码,您将看到它连续十次输出10次,然后第二次输出数字0-9.它显然与我使用X vs I的方式有关,以及我如何在第二个循环中每次给我的动作一个新变量V ...可能每个新V都是内存中的新地址,但我是努力理解为什么I.ToString()在第一个循环中没有做同样的事情...为什么第一个Action中使用的I.ToString()与第二个例子的工作方式不一样?
我怀疑这样的事情是可能的,但是如果没有将调试器附加到java应用程序,是否可以让一些集合填充有关java应用程序中生成的每个异常的信息,无论它是否被捕获?我知道在.NET中,应用程序会生成有关异常的消息,这些异常在此时称为"First Chance Exceptions",随后可能会或可能不会由应用程序处理.我想知道在java中是否可能存在类似的机制,我可以利用它来查看有关在运行时生成的所有异常的信息.
只是为了澄清.这与发生异常的上下文无关.这个问题不是关于我在catch块中做了什么,或者是未处理的异常.它是关于知道JVM是否提供了一种机制来查看在运行时生成的每个异常,无论生成什么或上下文.
首先,这不是关于观点的问题.我在调试时已经禁用了调试透视图.我的问题是关于Debug视图(Window - > Show view - > Other - > Debug - > Debug).弹出此视图,为您提供有关正在运行的线程以及它们被挂起的位置等信息.我的问题是,我常常发现自己需要只是看着控制台输出,而无论出于何种原因单步执行代码.我的控制台窗口与Debug视图锚定在eclipse IDE的同一区域.如果我在那里关闭调试视图,我将失去在断点处停止时跳过/跳入的能力(热键也不起作用,但应用程序仍然会在关闭视图时暂停.)如果我打开了调试视图,每次我跳过/进入某个方法时,屏幕都会将焦点从控制台切换回调试视图.这非常烦人.我怎么能禁用它?
编辑 - 我只是进行了一些测试,并且调试视图将焦点集中在与其相同的区域中锚定的任何其他内容上.无论其他标签的目的是什么.可能有一些例外,但肯定有办法在某个地方禁用它...
我还注意到它不会在每一步都切换到调试视图,在我的情况下,它会在写入SDT Out时切换.
最后一个编辑 - 我找到了一个解决方案,它没有回答我问的问题,但确实解决了我的特殊情况.在窗口 - >首选项 - >运行/调试 - >控制台下,当程序写入标准输出/标准错误时,有两个复选框用于显示.如果我检查那些,eclipse将首先切换到Debug视图,然后立即切换回控制台.
最近由于 TFS 插件,我被迫使用 Eclipse:
我有一些项目正在从 Netbeans 转换为 Eclipse 项目。其中一些项目相互引用。开始转换这些项目后,我很快发现 Eclipse 不想在构建后打包项目。因此,我使用build.xml
并为每个项目创建了一个新的“构建器”(其聪明的想法是不允许我在多个项目中重用构建器?)。当我完成所有这些工作后,我坐下来思考如何构建部署,我突然想到 Eclipse 没有在构建输出目录中包含任何引用的程序集。这很糟糕,因为手动创建 lib 文件夹并复制所需的所有 jar 文件很容易出错且耗时。这就是问题所在。是否有任何合理的方法来设置 Eclipse 项目上的构建器或属性,以便当我构建它时,它将创建一个“dist”目录,其中包含 jar 的项目类,以及一个包含所有项目的 lib 文件夹引用了项目附加的 jar 吗?