有办法从以后的提交中更改消息:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Run Code Online (Sandbox Code Playgroud)
如何更改第一次提交(没有父级)的提交消息?
在Java中用逗号分隔列表最清晰的方法是什么?
我知道几种方法,但我想知道最好的方法是什么("最佳"意味着最清晰和/或最短,而不是最有效.
我有一个列表,我想循环它,打印每个值.我想在每个项目之间打印一个逗号,但不是在最后一个项目之后(也不是在第一个项目之前).
List --> Item ( , Item ) *
List --> ( Item , ) * Item
Run Code Online (Sandbox Code Playgroud)
样品溶液1:
boolean isFirst = true;
for (Item i : list) {
if (isFirst) {
System.out.print(i); // no comma
isFirst = false;
} else {
System.out.print(", "+i); // comma
}
}
Run Code Online (Sandbox Code Playgroud)
示例解决方案2 - 创建子列表:
if (list.size()>0) {
System.out.print(list.get(0)); // no comma
List theRest = list.subList(1, list.size());
for (Item i : theRest) {
System.out.print(", "+i); // comma
}
}
Run Code Online (Sandbox Code Playgroud)
样品溶液3:
Iterator<Item> i = …Run Code Online (Sandbox Code Playgroud) 使用它会很好for (String item: list),但它只会迭代一个列表,而你需要一个显式的迭代器用于另一个列表.或者,您可以为两者使用显式迭代器.
以下是问题的示例,以及使用索引for循环的解决方案:
import java.util.*;
public class ListsToMap {
static public void main(String[] args) {
List<String> names = Arrays.asList("apple,orange,pear".split(","));
List<String> things = Arrays.asList("123,456,789".split(","));
Map<String,String> map = new LinkedHashMap<String,String>(); // ordered
for (int i=0; i<names.size(); i++) {
map.put(names.get(i), things.get(i)); // is there a clearer way?
}
System.out.println(map);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
{apple=123, orange=456, pear=789}
Run Code Online (Sandbox Code Playgroud)
有更清晰的方法吗?也许在某处的馆藏API?
不幸的是,HTML中没有CDATA.
这很遗憾,因为它非常适合添加javadoc包含XML的注释,因此您不必转义<和>,例如:
/**<![CDATA[ This parses <complexType name=""> ]]>*/
Run Code Online (Sandbox Code Playgroud)
但是,可以javadoc识别CDATA部分,并将其转换为HTML.例如:
This parses <complexType name="">
Run Code Online (Sandbox Code Playgroud)
或者它可以使用比CDATA更简单的语法.因为javadoc是可扩展的,所以有可能有人添加了这个功能; 或者可能javadoc已将它埋在某处...有人知道吗?
有时我在笔记本电脑的小键盘上按错了键,发生奇怪的导航或编辑(有时这对我来说是个新功能).
虽然我可以撤消编辑(u)或导航(control-o),但我不知道我做错了什么,所以将来很难避免它.不知道刚刚发生了什么也令人沮丧.所以,我希望能够看到我的最后几次击键.
有点像:set showcmd,但是要显示文字击键,并且(理想情况下)显示它们的简短历史.
我只在help/google中找到了命令行和导航历史记录.
澄清:我不是在寻找命令行历史,而是在寻找击键历史.例如,我是否)意外按下并转到下一句话?我是否按下dd并删除了一行?我猜它类似于击键记录器.
命令行历史记录(:history)仅显示在:提示符处输入的命令.
我正在寻找Sun标准java编译器的源代码javac.
jdk1.6.0_07有几个相关的类,但它们是接口(java.lang.Compiler和javax.tools.JavaCompiler).还有在一些包com.sun.mirror.*和com.sun.source.*,这似乎是代表了Java抽象语法树接口.
但我找不到编译器源代码 - 任何人都知道它在哪里?
当我第一次看到XML时,我认为它基本上是树的表示.然后我想:重要的不是它是树木的特别好的代表,而是每个人都同意的.就像ASCII一样.一旦建立,由于网络效应,很难取代.取代它的新方案必须要好得多(可能好10倍).当然,为了国际化,ASCII(大部分)已被(大部分)取代为Unicode.
根据谷歌的趋势,XML有x43领先,但正在下降 - 而JSON增长.
[ 编辑 ]请问JSON会将XML替换为数据格式吗?
注意: S表达式(来自lisp)是树的另一种表示,但尚未获得主流采用.还有许多其他提议,例如YAML和Protocol Buffers(用于二进制格式).
我可以看到JSON主宰着与客户端AJAX(AJAJ?)进行通信的空间,这可能会传递回传播到其他系统.
基于SGML的XML比作为文档格式的 JSON更好.我对XML作为数据格式感兴趣.
XML具有JSON缺乏的已建立的生态系统,尤其是定义格式(XML Schema)和转换它们(XSLT)的方法.XML还有许多其他标准,特别是Web服务 - 但它们的重量和复杂性可以说是与XML相悖,并且让人们想要一个新的开始(类似于"Web服务"开始作为CORBA的新起点).
[2010年3月编辑 ]与NoSQL一样,JSON是无模式的.
编辑我刚开始略读Codd着名的1970年论文,启动了这一切,甲骨文基于(大型共享数据库的数据关系模型[pdf]),并且惊讶地发现它似乎会回答这个问题.题.它讨论了当时市场上的数据库("层级"和"网络" - 如NoSQL?),内部表示独立的必要性,以及如何将数学"关系"应用于数据库的明确解释.
从历史上看,关系数据库的哪些特性给了企业采用它带来了哪些好处,使其大获成功?
今天,有很多理由使用RDB:它是标准的,产品是成熟的,调试的,功能齐全的,有供应商选择,有支持,有训练有素的劳动力等等.但为什么它变得如此受欢迎?
我听说" 分层数据库 "在关系数据库之前很流行 - 它们听起来像一个键值存储,其中值可以是另一组键值.如果是这样,那就类似于十年或两年前公布的面向对象数据库; 还有XML /文档数据库和NoSQL.
也许ACID交易(原子性等)?但这似乎并不特定于RDB.
也许是因为关系数据库使您能够定义纯粹与数据相关的数据模式 - 独立于特定编程语言,应用程序版本(演化)或应用程序的目的(这使得"阻抗不匹配"不可避免)但任何具有数据模式的数据库具有此功能.
也许是因为关系模型在数学上是合理的?但这听起来并不能说服管理者采用它 - 这将带来什么商业利益.
也许是因为数学模型为您提供了一种方法,可以将数据库重新排列为不同的常规形式,以提供不同的性能特征,这在数学上保证不会改变数据的含义?这似乎是合理的,我的单一教科书对此有很大帮助,但这对我来说听起来并不具有实际的商业利益(也许我错过了一些东西)?
总结一下:历史上,是什么让关系模型在层次模型中如此果断地获胜?我也对RDB是否仍然具有某些特殊品质感兴趣,这些品质能够使它们成为企业更好的实用选择(除了作为上述标准的好处之外).
非常感谢你能否解释一下 - 我一直很好奇这一点.
为了说明,这里是如何从命令行执行此操作:
vim `grep "hello" * -Rl`
Run Code Online (Sandbox Code Playgroud)
这将打开vim,其中包含所有"hello"的文件(-l仅提供文件名).我想做同样的事情,但是从vim内部.从概念上讲,这样的事情(不起作用):
:args !grep "hello" * -Rl
Run Code Online (Sandbox Code Playgroud)
我愿意采用完全不同的方法来实现这一目标; 我只是希望它在一条线上(所以它很容易编辑和重做).
答案是简单地使用反引号 - 但需要一个关键的附带条件! 以下内容对我不起作用,因为周围的引号hello:
:args `grep "hello" * -Rl`
Run Code Online (Sandbox Code Playgroud)
但是如果我删除它们或逃避引号它会起作用:
:args `grep hello * -Rl`
:args `grep \"hello\" * -Rl`
Run Code Online (Sandbox Code Playgroud)
(在混沌回答之后,这被埋没在评论中 - 我在这里添加它们以使它们更加明显,以防其他人遇到此问题)
我相信下面三个在语法上是正确的; 但根据惯例允许哪些(特别是在企业中)?
下面的第一个用于我见过的大多数例子(例如JAXB),但它的详细说明:
<xs:annotation>
<xs:appinfo>
<myinfo>don't panic</myinfo>
</xs:appinfo>
</xs:annotation>
Run Code Online (Sandbox Code Playgroud)
下面的第二个是允许的,因为允许任何属性<appinfo>(不在xml架构自己的命名空间中).它更短,看起来合理 - 但它是传统的吗?
<xs:annotation>
<xs:appinfo myinfo="don't panic"/>
</xs:annotation>
Run Code Online (Sandbox Code Playgroud)
下面的最后一个是我最喜欢的,因为它太短并且不会使架构混乱.我确信这是合法的,因为同样<appinfo>,任何属性都是允许的<annotation>(同样,提供非xml架构命名空间).但是它在不使用的情况下对应用程序信息进行编码<appinfo>,所以我担心它会不受欢迎.可不可能是?
<xs:annotation myinfo="don't panic"/>
Run Code Online (Sandbox Code Playgroud)
非常感谢您的评论!
java ×4
vim ×2
xml ×2
annotations ×1
cdata ×1
collections ×1
command-line ×1
database ×1
git ×1
git-amend ×1
git-commit ×1
git-rebase ×1
grep ×1
html ×1
javac ×1
javadoc ×1
json ×1
pretty-print ×1
vi ×1
xsd ×1