我有一个固定宽度字段文件,我正在尝试使用UNIX(Cygwin,在我的情况下)排序实用程序排序.
问题是文件顶部有一个两行标题,它被排序到文件的底部(因为每个标题行以冒号开头).
有没有办法告诉排序"将前两行传递给未排序的"或指定将冒号行排序到顶部的排序 - 其余行总是以6位数字开头(这实际上是关键字I如果有帮助的话,我会整理.
例:
:0:12345
:1:6:2:3:8:4:2
010005TSTDOG_FOOD01
500123TSTMY_RADAR00
222334NOTALINEOUT01
477821USASHUTTLES21
325611LVEANOTHERS00
Run Code Online (Sandbox Code Playgroud)
应该排序:
:0:12345
:1:6:2:3:8:4:2
010005TSTDOG_FOOD01
222334NOTALINEOUT01
325611LVEANOTHERS00
477821USASHUTTLES21
500123TSTMY_RADAR00
Run Code Online (Sandbox Code Playgroud) 所以我有一个String,我想创建一个Double对象,将String作为值.
我可以打电话
Double myDouble = new Double (myString);
或者我可以打电话
Double myDouble = Double.valueOf(myString);
有区别吗?我猜第一个保证在堆上创建一个新对象,第二个可能重用现有对象.
额外的功劳:字符串可能为null,在这种情况下我希望Double为null,但上述两者都抛出NullPointerException.有没有写作方式
Double myDouble = myString == null ? null : Double.valueOf(myString);
用更少的代码?
我有一个VS2010项目,它需要在bin\debug目录中创建一个dataIn和一个dataOut目录,以允许运行一些测试.
创建dataIn目录很简单 - 只需将包含内容的文件夹添加到项目中,并将其包含的每个文件的"复制到输出目录"属性设置为"始终复制"(或编辑项目文件以使用通配符捕获所有文件,如SO上的其他答案所示 - 该目录将由VS自动创建,以便可以将文件复制到其中.
我的问题:如何确保在需要时自动创建dataOut目录?
没有文件可以进入,因此ItemGroup中没有此目录.如果我手动将目录条目添加到项目文件中,则会收到错误消息:
"<path>\dataOut" is actually a directory. The "Copy" task does not support copying directories.
Run Code Online (Sandbox Code Playgroud)
(编辑:从目录名称中删除下划线,以便斜体可以工作!)
每当我启动Eclipse(3.5.2 Galileo)时,它总是以我之前使用的透视图打开.我希望它始终在默认透视图中打开,但我找不到在首选项中设置它的方法.
我使用笔记本电脑进行开发工作,我的办公桌上有一个扩展坞.当我停靠时,我有两个显示器给我2400个水平像素的房地产,我工作的视角在一个监视器和所有其他视图(控制台,包浏览器,JUnit等)上有一个完整大小的代码编辑屏幕. )在另一台显示器上的浮动窗口中打开.
当我移除并使用笔记本电脑上的内置屏幕时,我"仅"水平地具有1920像素.如果我在这种情况下打开"双屏幕"透视图,则向左拖动浮动窗口,使其右侧边缘与屏幕对齐,并且它们彼此重叠并与主编码窗口重叠.更糟糕的是,如果我退出Eclipse或切换到我的1屏幕透视图(我将其设置为默认值),则会保存2屏幕透视图的当前布局,因此我必须将所有窗口拖回到所在位置当我回到我的扩展坞时它们属于它们.
在我每次关闭Eclipse之前,我都会记得切换到单屏幕视角,特别是如果我知道下次打开Eclipse时我将会解除工作状态,但遗憾的是我忘记了这一点.
因此,我希望Eclipse 始终以默认的单屏Java视角打开.如果我没有移动,那就是我将使用的视角.如果我停靠,我可以使用工具栏中的一个图标快速切换到双屏幕.
有什么建议?
有没有办法将整数格式化为C#中的等效ASCII/Unicode字符?例如,如果我有以下代码:
int n = 65;
string format = ""; // what?
string s = string.Format(format, n);
Run Code Online (Sandbox Code Playgroud)
我需要在字符串中放置format一个单个字符'A',正在编写s- 基本上我正在寻找相当于在C中执行以下操作:
int n = 65;
char s[2];
char format = "%c";
sprintf(s, format, n); /* s <- 'A' */
Run Code Online (Sandbox Code Playgroud)
编辑
我应该更多地解释一下我正在尝试做什么,因为显而易见的答案"把它投入到char",并没有帮助.
我有一种情况,我有一个整数值,代表一个银行帐户校验位,但需要输出一些国家的字符和其他国家的(0填充)数字字符串.我想知道是否有一种方法可以通过更改格式字符串在两者之间切换,因此我可以保存适当格式字符串的字典,键入国家/地区代码.
编辑2
(对于Oded)这样的事......
IDictionary<string, string> ccFormat = new Dictionary<string, string>()
{
{ "GB", "{0:D}" }, // 0-9
{ "PT", "{0:D2}" }, // 00-99
{ "US", "{0:D3}" }, // 000-999
{ "IT", ???? } // A-Z -- What should …Run Code Online (Sandbox Code Playgroud) 我有一些代码从BufferedReader读取行,并从它读取的数据创建一个对象,然后将其发送出去进行处理.这一直持续到BufferedReader.readLine()返回null(即到达文件结尾或关闭套接字等)
我认为围绕它创建一个类可能是有用的,它实现了Iterable<MyObject>它可以使用它
IObjectReader objectReader = new MyObjectReader(someBufferedReaderThatExists);
for (IObjectToProcess obj : objectReader) {
processTheObject(obj);
}
Run Code Online (Sandbox Code Playgroud)
因为这可以更容易地注入IObjectReader可能创建返回不同类型IObjectToProcess对象的不同对象.
然而,棘手的一点是实现Iterable.hasNext()- 如何在没有实际调用的情况下BufferedReader.readLine()返回null?
(注意:BufferedReader.ready()不是答案:它只是告诉我读取是否会阻止,而不是它会返回null)
我有一个 Java 应用程序,它依赖于一些用 C 编写的遗留代码,并通过 JNI 访问这些代码。本机库存储在一个子目录中(实际上,有两个子目录:一个包含 32 位库,另一个包含 64 位库)。
在 Windows 中,以下命令行形式可以正常工作:
java -Djava.library.path=nativelib64 -classpath myapp.jar;jni_lib.jar MyApplication
Run Code Online (Sandbox Code Playgroud)
但是 AIX 和 Linux 上的等效项(基本上是类路径中的分号替换为冒号)失败并出现 UnsatisfiedLinkErrors - 我不得不在调用之前显式设置 LIBPATH 或 LD_LIBRARY_PATH,因为我没有尝试过将 -Djava.library.path 设置为(例如“nativelib64”,“./nativelib64”,“/full/path/to/myappdir/nativelib64”)似乎有效。
UNIX 版本的 JVM 不支持从命令行设置 java.library.path 属性吗?
是否有更简洁的写作方式
string aString = someObj == null ? null : someObj.ToString();
Run Code Online (Sandbox Code Playgroud)
即如果someObj是一个空引用然后返回一个空字符串,否则调用对象上的ToString()并返回?
Convert.ToString()没有帮助,因为它返回String.Empty(); 我将结果传递给XML序列化程序,如果对象为null而不是空的,我希望没有元素.