我需要String在Java中连接两个数组.
void f(String[] first, String[] second) {
String[] both = ???
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是什么?
如何将数组转换为Java中的列表?
我使用Arrays.asList()但行为(和签名)以某种方式从Java SE 1.4.2(现在存档中的文档)更改为8,我在网上找到的大多数片段使用1.4.2行为.
例如:
int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
Run Code Online (Sandbox Code Playgroud)
在许多情况下,它应该很容易被发现,但有时它可能会被忽视:
Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Run Code Online (Sandbox Code Playgroud) 从Java 5开始,我们已经对原始类型进行了装箱/拆箱,因此它int被包装成java.lang.Integer等等.
我最近看到了很多新的Java项目(肯定需要一个至少版本为5的JRE,如果不是6个),int而不是java.lang.Integer使用后者,尽管使用后者要方便得多,因为它有一些帮助方法可以转换到long的值等.
为什么有些人仍然在Java中使用原始类型?有什么实际好处吗?
可能重复:
在Java集合中存储原始值?
在java中我使用以下内容: -
public HashMap<char, int> buildMap(String letters)
{
HashMap<char, int> checkSum = new HashMap<char, int>();
for ( int i = 0; i < letters.length(); ++i )
{
checkSum.put(letters.charAt(i), primes[i]);
}
return checkSum;
}
Run Code Online (Sandbox Code Playgroud)
我收到与不适当类型有关的错误.我分别使用Character和Integer而不是char和int解决了我的问题.但是,我无法弄清楚为什么HashMap无法处理原始数据类型.
在我的一个Java项目中,由于Java处理(而非)原语的方式,我受到代码重复的困扰.具有相同的变化手工复制到四个不同的位置(之后int,long,float,double)再次,对于第三次的时候,再和再次我来到非常接近(?)来抢购.
在各种形式中,这个问题已经在StackOverflow上提出了:
共识似乎趋向于两种可能的替代方案:
好吧,第二个解决方案就是我现在正在做的事情,它对我的理智慢慢变得危险,就像众所周知的折磨技术一样.
自从提出这些问题并且Java 7出现以来已过去两年了.因此,我希望有一个更简单和/或更标准的解决方案.
Java 7是否有任何可能在这种情况下缓解压力的变化?我在简明的变更摘要中找不到任何内容,但也许在某处有一些不起眼的新功能?
虽然源代码生成是另一种选择,但我更喜欢使用标准JDK功能集支持的解决方案.当然,使用cpp或其他代码生成器可以工作,但它添加了更多的依赖项,并需要更改构建系统.
似乎JDK支持的唯一代码生成系统是通过注释机制.我设想一个可以像这样扩展源代码的处理器:
@Primitives({ "int", "long", "float", "double" })
@PrimitiveVariable
int max(@PrimitiveVariable int a, @PrimitiveVariable int b) {
return (a > b)?a:b;
}
Run Code Online (Sandbox Code Playgroud)
理想的输出文件将包含此方法的四个请求变体,最好使用相关的Javadoc注释等.是否有某处注释处理器来处理这种情况?如果没有,构建一个会怎样?
也许最近出现了一些其他技巧?
编辑:
一个重要的注意事项:除非我有理由,否则我不会使用原始类型.即使是现在,在某些应用程序中使用盒装类型也会产生非常真实的性能和内存影响.
编辑2:
使用max()作为示例允许使用compareTo()所有数字盒装类型中可用的方法.这有点棘手:
int sum(int a, int b) {
return a …Run Code Online (Sandbox Code Playgroud) 任何人都可以帮助我并告诉如何将char数组转换为列表,反之亦然.我正在尝试编写一个程序,用户输入一个字符串(例如"Mike is good"),在输出中,每个空格都被"%20"(Ie "Mike%20is%20good")替换.虽然这可以通过多种方式完成,但由于插入和删除在链表中需要O(1)时间,我想用链表进行尝试.我正在寻找将char数组转换为列表,更新列表然后将其转换回来的方法.
public class apples
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
StringBuffer sb = new StringBuffer(input.nextLine());
String s = sb.toString();
char[] c = s.toCharArray();
//LinkedList<char> l = new LinkedList<char>(Arrays.asList(c));
/* giving error "Syntax error on token " char",
Dimensions expected after this token"*/
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在这个程序中的用户输入字符串,这是我在我存储StringBuffer,这我先转换为字符串,然后到一个char数组,但我没能获得一个列表l从s.
如果有人可以告诉正确的方法将char数组转换为列表,反之亦然,我将非常感激.
我有以下代码:
List<int> intList = new ArrayList<int>();
for (int index = 0; index < ints.length; index++)
{
intList.add(ints[index]);
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误......
Syntax error on token "int", Dimensions expected after this token
Run Code Online (Sandbox Code Playgroud)
错误发生在以List.开头的行上.有人能解释我收到错误的原因吗?
也许是一个新手问题,但我不明白为什么当我尝试做一些像Map<String, boolean>我的IDE尖叫说"令牌上的语法错误"boolean",Dimensions预期在此令牌后",但使用布尔它完美.任何人都可以解释我为什么会那样?提前致谢!!
如何在java中定义char堆栈?例如,要创建一个String堆栈,我可以使用这样的结构:
Stack <String> stack= new Stack <String> ();
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将char放入String时我得到了一个错误:
Syntax error on token "char", Dimensions expected after this token
Run Code Online (Sandbox Code Playgroud) 我有一些本机C++代码,我正在使用SWIG转换为Java,以便我的Java应用程序可以使用它.特别是有一些函数返回std :: vector.这是我的界面文件的片段:
%include "std_vector.i"
namespace std {
%template(Vector) vector<double>;
%template(Matrix) vector<vector<double> >;
}
%include "std_string.i"
Run Code Online (Sandbox Code Playgroud)
std_string.i而std_vector.i被列入我的,我使用痛饮的构建.我的第一个惊喜是Java输出包含了SWIG的"自有"版本的Vector类(与使用相反java.util.Vector).我真正的问题是从这些函数返回的Vector似乎不起作用.例如,我无法使用get()(有时崩溃程序)或size()返回负值的函数来检索其内容.我知道Vectors包含数据,因为我编写了相同函数的'String'版本,它们只是遍历Vectors(回到本机C++代码中)并以逗号分隔String值返回内容.虽然这是一个有效的解决方法,但最终我希望这能够正常工作,因为我能够接收和操纵Vectors.任何帮助/提示将非常感激.