我有一个字符串:
String stringProfile = "0, 4.28 10, 4.93 20, 3.75";
我正在尝试将其转换为如下数组:
double [][] values = {{FastMath.toRadians(0), FastMath.toRadians(4.28)},
{FastMath.toRadians(10), FastMath.toRadians(4.93)},
{FastMath.toRadians(20), FastMath.toRadians(3.75)}};
FastMath.toRadians
是每个元素上的方法。
问题数量:
要做的第一件事是分割字符串:
List<String> stringProfileList= Arrays.asList(stringProfile.split(" "));
输出将为"0, 4.28, 10, 4.93, 20, 3.75"
,因此现在每个元素都由一个“”分隔,而不是每个元素。
然后对于列表中的每2个元素,我需要分配一个数组。 在每个数组中,我将FastMath.toRadians()应用于每个元素,然后将每个数组附加到更大的多维数组。
这是解决这个问题的正确方法吗?我陷入了每2个元素实现的问题。
我还需要将这些字符串元素转换为double,这似乎并不简单。
答案 0 :(得分:1)
如果您想使用Stream
,请尝试以下操作:
Pattern PAIR = Pattern.compile("(?<=\\d)\\s(?=\\d)");
double[][] result = PAIR.splitAsStream(stringProfile)
.map(pair -> pair.split(","))
.map(pair -> new double[] { FastMath.toRadians(Double.valueOf(pair[0])), FastMath.toRadians(Double.valueOf(pair[1])) })
.toArray(i -> new double[i][]);
一个Pattern
用于在空白字符上分割stringProfile
,这些空白字符后面是 ,而前面是 。这将导致一个Stream
字符串,其中包含一对数字,其中一对数字除以', '
。我们在第一个split
中','
上的这个字符串map
得到代表数字的字符串数组。在下一个map
中,将计算解析出的数字及其弧度。
我们可以将数字的解析和弧度的计算指定为单个map
步骤。以下代码较为冗长,但会创建一个附加的double数组:
double[][] result = PAIR.splitAsStream(stringProfile)
.map(pair -> pair.split(","))
.map(pair -> new double[] { Double.valueOf(pair[0]), Double.valueOf(pair[1]) })
.map(pair -> new double[] { FastMath.toRadians(pair[0]), FastMath.toRadians(pair[1]) })
.toArray(i -> new double[i][]);
如果我们想重用双精度数组,可以这样做:
.map(pair -> {
pair[0] = FastMath.toRadians(pair[0]);
pair[1] = FastMath.toRadians(pair[1]);
return pair;
})
最后一步将双精度数组收集为二维数组。
编辑:
看看this demo。
使用Pattern类文档的措辞,使用的模式查找空格字符(\\s
),该字符前面((?<=\\d)
= < em>向后看),然后以一位数字((?=\\d)
开头(\\d
= 向前看)。这些外观具有零宽度,因此可以对其进行捕获(匹配)评估,但不属于匹配序列的一部分({{3} }。 匹配序列仅包含一个空白字符(\\s
)。
对于stringProfile
,此模式将在两种情况下匹配:"8 1"
和"3 2"
。在这些情况下," "
周围有两位数字。另一方面,例如"0, 4"
不匹配。 ","
的出现会阻止匹配。
答案 1 :(得分:0)
如果在不前加逗号分隔,则会得到一对逗号分隔的对。然后可以将它们再次拆分并映射到 private static Int32 GetSheetIdFromSheetNum(string sSpreadsheetId, Int32 iSheetNum, SheetsService gsService, ref string sTitle)
{ //Get the Sheet Id for the specified sheet number and Spreadsheet id.
Int32 iSheetId = -1;
Int32 iLoop = -1;
//Google.Apis.Sheets.v4.Data.Sheet gsSheet;
Google.Apis.Sheets.v4.Data.Spreadsheet gsSpreadsheet;
try
{
sTitle = string.Empty;
gsSpreadsheet = gsService.Spreadsheets.Get(sSpreadsheetId).Execute();
foreach (Sheet gsSheet in gsSpreadsheet.Sheets)
{
iLoop += 1;
if (iLoop != iSheetNum)
{
continue;
}
iSheetId = (gsSheet.Properties.SheetId).GetValueOrDefault(-1);
sTitle = gsSheet.Properties.Title;
break;
}
}
catch (Exception ex)
{
// Do error processing here.
}
return iSheetId;
} //GetSheetIdFromSheetNum
。
您可以随后添加任何进一步的处理。
checking whether to enable pthreads... yes, shared
checking whether to enable AddressSanitizer for pthreads... no
checking whether to enable dmalloc for pthreads... no
checking for ZTS... configure: error: pthreads requires ZTS, please re-compile PHP with ZTS enabled
ERROR: `/tmp/pear/temp/pthreads/configure --with-php-config=/usr/bin/php-config' failed
[[0.0,4.28],[10.0,4.93],[20.0,3.75]]